docker基础

docker基础(开发文档)docker hub

  1. yum 安装 gcc相关环境(需要确保虚拟机可以上外网)
yum -y install gcc
yum -y install gcc-c++
  1. 卸载旧版本
yum remove docker  docker-client   docker-client-latest  docker-common   docker-latest  docker-latest-logrotate  docker-logrotate  docker-engine
  1. 安装需要的包
yum install -y yum-utils device-mapper-persistent-data lvm2
  1. 设置镜像库
# 3、 设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  1. 更新um软件包索引
yum makecache fast
  1. 安装Docker ce
# 4、 安装docker,出现输入的界面都按 y 
yum install -y docker-ce
# 5、 查看docker版本,验证是否验证成功
docker -v
  1. 启动 卸载docker
# 启动docker服务
systemctl start docker
# 查看是否启动成功
systemctl status docker
# 自动启动
systemctl  enable docker
# 关闭docker
systemctl stop docker
# 卸载
yum -y remove docker-ce docer-ce-cli containerd.io
rm -rf /var/lib/docker
  1. 阿里云镜像加速
  • 介绍:https://www.aliyun.com/product.acr
  • 注册阿里云账号(可复制淘宝号)
  • 进入管理控制台设置密码开通
  • 查看自己的镜像加速器
vi /etc/docker/daemon.json
# 备注:insert 编辑内容如下      并esc  输入:wq 保存退出  
{
"registry-mirrors":["https://69k21aoz.mirror.aliyuncs.com"]
}
## 或者
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://2be16b36.m.daocloud.io
# 重启docker   重新进行step1 安装速度变快
systemctl restart docker

docker 基本命令

## 查看所有镜像 
docker images
## 删除镜像(会提示先停止使用中的容器) 
docker rmi  镜像name/镜像id
## 查看所有容器 
docker ps -a
## 查看容器运行日志 
docker logs 容器名称/容器id
## 查看容器进程
docker top 容器名称/容器id
## 停止容器运行
docker stop 容器name/容器id
## 终止容器后运行 
docker start 容器name/容器id
## 容器重启 
docker restart 容器name/容器id
## 删除容器 
docker rm 容器name/容器id
## 删除所有容器
dcker rm -f $(docker ps -aq)
## 搜说搜索镜像
docker search 软件 
# 使用docker pull 拉取docker hub仓库中镜像 (注意备注)
docker pull 软件 
# 给自己镜像加标签
docker tag 镜像id 镜像名:版本
"""
对于Docker Save方法,会保存该镜像的所有历史记录
对于Docker Export 方法,不会保留历史记录,即没有commit历史
docker save保存的是镜像(image),docker export保存的是容器(container);
docker load用来载入镜像包,docker import用来载入容器包,但两者都会恢复为镜像;
docker load不能对载入的镜像重命名,而docker import可以为镜像指定新名称。
"""
## 将指定镜像保存成 tar 归档文件。
docker save -o xxx.tar 镜像名:版本
或  docker save > xxx.tar 镜像名:版本 
##本地导入镜像
docker load -i xxx.tar  或者 docker load < xxx.tar
## 导出容器
docker export -o nginx-test.tar nginx-test # 其中-o表示输出到文件,nginx-test.tar为目标文件,nginx-test是源容器名(name)
## 导入容器
docker import nginx-test.tar nginx:imp
# 创建容器命令:
docker run
-i:# 表示运行容器
-t:# 表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
--name : # 为创建的容器命名。
-v:# 表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v 做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-d:# 在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
-p:# 表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
--privileged=true # 来解决挂载的目录没有权限的问题
-restart=always ## 总是启动
## (1)交互式方式创建容器
docker run -it --name=容器名称 镜像名称:标签 /bin/bash
## 这时我们通过ps命令查看,发现可以看到启动的容器,状态为启动状态 
## 退出当前容器
exit
## (2)守护式方式创建容器:
docker run -di --name=容器名称 镜像名称:标签
## 登录守护式容器方式:
docker exec -it 容器名称 (或者容器ID) /bin/bash
## 如果我们需要将文件拷贝到容器内可以使用cp命令
docker cp 需要拷贝的文件或目录 容器名称:容器目录
## 也可以将文件从容器内拷贝出来
docker cp 容器名称:容器目录 需要拷贝的文件或目录
## 查看容器IP地址
docker inspect 容器名称(容器ID) 
## 也可以直接执行下面的命令直接输出IP地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID)

Mysql示例

## 启动docker中镜像
docker run --name mysql8.0 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0
或者
sudo docker run -d -p 3307:3306 --restart always -e MYSQL_ROOT_PASSWORD="123456" --name mysql57 -v /docker/mysql56/config/my.cnf:/etc/my.cnf -v /docker/mysql57/data:/var/lib/mysql mysql:5.6
备注 :--name 服务启动别名设置  -p端口映射 宿主机端口:镜像运行端口  -d 镜像名:tag 使用守护进程模式启动 -e:设置root帐号密码
step6:查看运行的镜像
docker ps -a
step7:进入镜像 运行mysql
docker exec -it mysql8.0 /bin/bash
备注:exec docker进入容器命令   -it 容器中服务别名 /bin/bash   表示命令行模式  与 -d 后台守护进行模式启动 形成两种运行方式   
进入容器中如图所示变化如下
cd /usr/bin
mysql -u root -p
# 备注: 在容器中进入用户目录启动mysql 输入密码

可视化

  • portainer(选择这个)
docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

commit镜像

docker commit 提交容器成为新副本
## 命令和git类似
docker commit -m="提交描述" -a="作者" 容器id 目标镜像:[tag]

容器数据卷

数据持久化

sudo docker run -d -p 3307:3306 --restart always -e MYSQL_ROOT_PASSWORD="123456" --name mysql57 -v /docker/mysql56/config/my.cnf:/etc/my.cnf -v /docker/mysql57/data:/var/lib/mysql mysql:5.6

挂在查询

·

docker inspect container_name | grep Mounts -A 20

Dockerfile

FROM # 基础镜像,一切从这里开始构建
MAINTAINER # 镜像是谁写的, 姓名+邮箱
RUN # 镜像构建的时候需要运行的命令
ADD # 步骤,tomcat镜像,这个tomcat压缩包!添加内容
WORKDIR # 镜像的工作目录
VOLUME # 挂在目录
EXPOSE ## 暴漏端口
CMD ## 指定容器启动的时候的命令。只有最后一个会生效,可被替代
ENTRYPOINT #指定容器启动的时候的命令, 可被追加
ONBUILD ## 当构建被继承DockerFile 这个时候就会运行ONBUILD的指令。触发指令
COPY ## 复制,类似ADD,将文件拷贝到镜像。
ENV ## 设置环境变量

DockerFile写Centos镜像

FROM centos
MAINTAINER daiyizheng<387942239@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "====end===="
CMD /bin/bash

运行

docker build -f Dockerfile -t mycentos:0.1 . #不要忘了后面的'.'

tomcat实战

  • 准备 tomcat.tar.gz 和 jdk1.8.tar.gz
  • 编写dockerfile
FROM centos
MAINTAINER daiyizheng<387942239@qq.com>
COPY readme.txt /usr/local/readme.txt # 帮助文档
ADD jdk-8u11-linux-x64.tar.gz /usr/local # 自动解压
ADD apache-tomcat-9.0.22.tar.gz /usr/local
RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8_11
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.22
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.22
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.22/bin/start.sh && tail -F /usr/local/apache-tomcat-9.0.22/bin/logs/catalina.out

构建

docker build -f Dockerfile -t mytomcat:0.1 .

运行

docker run -d -p 9000:9000 --name mytomcat -v /home/xx:/usr/local/apache-tomcat-9.0.22/webpps/test -v /home/xxx:/usr/local/apache-tomcat-9.0.22/logs

发布镜像

  1. docker hub
  • 注册docker-hub账号
  • 登录账号 docker login -u xxx
  • 提交镜像 docker push daiyizheng/自己镜像:版本
  1. 阿里云上传
  • 注册账号

  • 创建命名空间

  • 创建镜像仓库

  • 推送

# 1. 登录阿里云Docker Registry
sudo docker login --username=d呆小症 registry.cn-hangzhou.aliyuncs.com
## 用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。
## 您可以在访问凭证页面修改凭证密码。
## 2. 从Registry中拉取镜像
 sudo docker pull registry.cn-hangzhou.aliyuncs.com/daiyizheng/daiyizheng:[镜像版本号]
### 3. 将镜像推送到Registry
sudo docker login --username=d呆小症 registry.cn-hangzhou.aliyuncs.com
sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/daiyizheng/daiyizheng:[镜像版本号]
sudo docker push registry.cn-hangzhou.aliyuncs.com/daiyizheng/daiyizheng:[镜像版本号]
## 请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。
##选择合适的镜像仓库地址
## 从ECS推送镜像时,可以选择使用镜像仓库内网地址。推送速度将得到提升并且将不会损耗您的公网流量。
## 如果您使用的机器位于VPC网络,请使用 registry-vpc.cn-hangzhou.aliyuncs.com 作为Registry的域名登录。

Docker 网络

–link

–net (bridge )

# docker网络命令
docker network COMMAND

自定义网络

docker run -d -P --name tomcat01 tomcat
docker run -d -P tomcat01 --net bridge tomcat
docker network create --driver bridge --subnet 192.162.0.0/16 --gateway 192.168.0.1 mynet
docker run -d -P tomcat01-mynet --net mynettomcat

网络连通

网卡与网卡不能打通,网卡与容器可以打通

# 测试tomcat01与 mynet打通
docker network connect mynet tomcat01 
## 打通之后就是tomcat01 放到了mynet网络下
#就是一个容器两个IP地址
# 阿里云服务 公网IP 丝网IP

实战 部署Redis集群

# 创建网卡
docker network create redis --subnet 172.38.0.0/16
# 通过脚本创建六个redis配置
for port in $(seq 1 6);\
do \
mkdir -p /mydata/redis/node-${port}/conf
touch /mydata/redis/node-${port}/conf/redis.conf
cat << EOF >> /mydata/redis/node-${port}/conf/redis.conf
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.38.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done
# 通过脚本运行六个redis
for port in $(seq 1 6);\
docker run -p 637${port}:6379 -p 1667${port}:16379 --name redis-${port} \
-v /mydata/redis/node-${port}/data:/data \
-v /mydata/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.1${port} redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
docker exec -it redis-1 /bin/sh #redis默认没有bash
redis-cli --cluster create 172.38.0.11:6379 172.38.0.12:6379 172.38.0.13:6379 172.38.0.14:6379 172.38.0.15:6379 172.38.0.16:6379  --cluster-replicas 1

docker 小结

热门文章

暂无图片
编程学习 ·

exe4j详细使用教程(附下载安装链接)

一、exe4j介绍 ​ exe4j是一个帮助你集成Java应用程序到Windows操作环境的java可执行文件生成工具&#xff0c;无论这些应用是用于服务器&#xff0c;还是图形用户界面&#xff08;GUI&#xff09;或命令行的应用程序。如果你想在任务管理器中及Windows XP分组的用户友好任务栏…
暂无图片
编程学习 ·

AUTOSAR从入门到精通100讲(126)-浅谈车载充电系统通信方案

01 引言 本文深入研究车载充电系统策略,设计出一套基于电动汽车电池管理系统与车载充电机的CAN通信协议,可供电动汽车设计人员参考借鉴。 02 电动汽车充电系统通讯网络 电动汽车整车控制系统中采用的是CAN总线通信方式,由一个整车内部高速CAN网络、内部低速CAN网络和一个充电…
暂无图片
编程学习 ·

CMake(九):生成器表达式

当运行CMake时&#xff0c;开发人员倾向于认为它是一个简单的步骤&#xff0c;需要读取项目的CMakeLists.txt文件&#xff0c;并生成相关的特定于生成器的项目文件集(例如Visual Studio解决方案和项目文件&#xff0c;Xcode项目&#xff0c;Unix Makefiles或Ninja输入文件)。然…
暂无图片
编程学习 ·

47.第十章 网络协议和管理配置 -- 网络配置(八)

4.3.3 route 命令 路由表管理命令 路由表主要构成: Destination: 目标网络ID,表示可以到达的目标网络ID,0.0.0.0/0 表示所有未知网络,又称为默认路由,优先级最低Genmask:目标网络对应的netmaskIface: 到达对应网络,应该从当前主机哪个网卡发送出来Gateway: 到达非直连的网络,…
暂无图片
编程学习 ·

元宇宙技术基础

请看图&#xff1a; 1、通过AR、VR等交互技术提升游戏的沉浸感 回顾游戏的发展历程&#xff0c;沉浸感的提升一直是技术突破的主要方向。从《愤怒的小鸟》到CSGO,游戏建模方式从2D到3D的提升使游戏中的物体呈现立体感。玩家在游戏中可以只有切换视角&#xff0c;进而提升沉浸…
暂无图片
编程学习 ·

flink的伪分布式搭建

一 flink的伪分布式搭建 1.1 执行架构图 1.Flink程序需要提交给 Job Client2.Job Client将作业提交给 Job Manager3.Job Manager负责协调资源分配和作业执行。 资源分配完成后&#xff0c;任务将提交给相应的 Task Manage。4.Task Manager启动一个线程以开始执行。Task Manage…
暂无图片
编程学习 ·

十进制正整数与二进制字符串的转换(C++)

Function one&#xff1a; //十进制数字转成二进制字符串 string Binary(int x) {string s "";while(x){if(x % 2 0) s 0 s;else s 1 s;x / 2;}return s; } Function two&#xff1a; //二进制字符串变为十进制数字 int Decimal(string s) {int num 0, …
暂无图片
编程学习 ·

[含lw+源码等]微信小程序校园辩论管理平台+后台管理系统[包运行成功]Java毕业设计计算机毕设

项目功能简介: 《微信小程序校园辩论管理平台后台管理系统》该项目含有源码、论文等资料、配套开发软件、软件安装教程、项目发布教程等 本系统包含微信小程序做的辩论管理前台和Java做的后台管理系统&#xff1a; 微信小程序——辩论管理前台涉及技术&#xff1a;WXML 和 WXS…
暂无图片
编程学习 ·

树莓派驱动DHT11温湿度传感器

1&#xff0c;直接使用python库 代码如下 import RPi.GPIO as GPIO import dht11 import time import datetimeGPIO.setwarnings(True) GPIO.setmode(GPIO.BCM)instance dht11.DHT11(pin14)try:while True:result instance.read()if result.is_valid():print(ok)print(&quo…
暂无图片
编程学习 ·

ELK简介

ELK简介 ELK是三个开源软件的缩写&#xff0c;Elasticsearch、Logstash、Kibana。它们都是开源软件。不过现在还新增了一个 Beats&#xff0c;它是一个轻量级的日志收集处理工具(Agent)&#xff0c;Beats 占用资源少&#xff0c;适合于在各个服务器上搜集日志后传输给 Logstas…
暂无图片
编程学习 ·

Linux 基础

通常大数据框架都部署在 Linux 服务器上&#xff0c;所以需要具备一定的 Linux 知识。Linux 书籍当中比较著名的是 《鸟哥私房菜》系列&#xff0c;这个系列很全面也很经典。但如果你希望能够快速地入门&#xff0c;这里推荐《Linux 就该这么学》&#xff0c;其网站上有免费的电…
暂无图片
编程学习 ·

Windows2022 无线网卡装不上驱动

想来 Windows2022 和 windows10/11 的驱动应该差不多通用的&#xff0c;但是死活装不上呢&#xff1f; 搜一下&#xff0c;有人提到 “默认安装时‘无线LAN服务’是关闭的&#xff0c;如果需要开启&#xff0c;只需要在“添加角色和功能”中&#xff0c;选择开启“无线LAN服务…
暂无图片
编程学习 ·

【嵌入式面试宝典】版本控制工具Git常用命令总结

目录 创建仓库 查看信息 版本回退 版本检出 远程库 Git 创建仓库 git initgit add <file> 可反复多次使用&#xff0c;添加多个文件git commit -m <message> 查看信息 git status 仓库当前的状态git diff 差异对比git log 历史记录&#xff0c;提交日志--pret…
暂无图片
编程学习 ·

用Postman生成测试报告

newman newman是一款基于nodejs开发的可以运行postman脚本的工具&#xff0c;使用Newman&#xff0c;可以直接从命令运行和测试postman集合。 安装nodejs 下载地址&#xff1a;https://nodejs.org/en/download/ 选择自己系统相对应的版本内容进行下载&#xff0c;然后傻瓜式安…
暂无图片
编程学习 ·

Java面向对象之多态、向上转型和向下转型

文章目录前言一、多态二、引用类型之间的转换Ⅰ.向上转型Ⅱ.向下转型总结前言 今天继续Java面向对象的学习&#xff0c;学习面向对象的第三大特征&#xff1a;多态&#xff0c;了解多态的意义&#xff0c;以及两种引用类型之间的转换&#xff1a;向上转型、向下转型。  希望能…