zwt00 2020-06-16
# sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
2、更新docker yum 源 不更新源,会默认安装老旧版docker
# sudo yum install -y yum-utils # sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
3、安装docker 需要安装三个软件 docker-ce docker-ce-cli containerd.io
# sudo yum install docker-ce docker-ce-cli containerd.io
安装特定版本方式 :请在存储库中列出可用版本,然后选择并安装:
一个。列出并排序您存储库中可用的版本。此示例按版本号(从高到低)对结果进行排序,并被截断:
# yum list docker-ce --showduplicates | sort -r
docker-ce.x86_64 3:18.09.1-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-stable
4、启动docker 验证 docker 是否安装成功
# sudo systemctl start docker
通过运行hello-world?映像来验证是否正确安装了docker
# sudo docker run hello-world
或者使用 docker version /--vesion 查看 docker 版本信息
docker info 查看docker 详细信息
二、docker image 管理
1、docker image 仓库地址配置(安装好docker后建议配置成国内的仓库地址)
docker 官方镜像仓库地址 https://hub.docker.com/explore 从中国访问一般比较慢
Docker 国内镜像地址 https://registry.docker-cn.com
修改docker 默认仓库址 vim /etc/docker/daemon.json
{ “registry-mirrors”:[“https://registry.docker-cn.com”] }
2、docker image 常用命令
命令 | 用法 |
---|---|
docker image history [image-name] | 查看镜像分层历史 |
docker image ls/list | 查看本地镜像列表 (等价于 docker images) |
docker image rm [image-name] | 删除本地镜像 |
docker imgae tag | 给本地镜像打标记 |
docker image pull | 从默认仓库地址下载镜像 |
docker iamge prune | 删除不在用的镜像 |
docker image save | 导出(保存)本地镜像库镜像 |
docker image load | 导入镜像 |
docker image import | 导入容器文件系统tar归档文件创建镜像 |
docker export | 导出容器文件系统到tar归档文件 |
docker image inspect | 显示镜像详细信息 |
三、docker container 管理
1、创建容器命令: docker container run -itd --name container_name image_name
常用创建容器子命令(run)选项
选项 | 含义 |
---|---|
-i | 可以登录的交互式容器 |
-t | 给容器分配一个tty 伪终端 |
-d | 后台进行容器 |
--dns | 设置DNS服务器 |
-e | 设置变量,可以传入到容器中 |
--env-file list | 从文件中读取环境变量 |
-p | 发布容器端口到主机 |
-P | 发布容器所有的EXPOSE端口到宿主机随机端口 |
-h | 设置容器主机名 |
--ip | 指定容器的IP,只能用于自定义网络 |
--link list | 添加连接到另一个容器 |
--network | 添加连接到一个网络 |
--mount | 挂载宿主机分区到容器 |
-v, --volume list | 挂载宿主机目录到容器 |
--restart string | 容器退出时重启策略,默认no [always \ on-failure] |
--add-host list | 添加其他主机到容器中/etc/hosts |
-m, --memory | 容器可以使用的最大内存里 |
--memory-swap | 交换分区的大小 |
--memonry-swappiness=<0-100> | 容器使用SWAP分区的百分比(0-100,默认-1 不启用) |
--memory-reservasion | 内存软件限制,docker检测主机容器争用或内存不足时所激活的软 限制,使用此选项,值必须低于--memory,以使优先 |
--oom-kill-disable | 当宿主机内存不足时,内核会杀死容器中的进程。建议设置--momery选项再禁用oom。如果没有设置,主机可能会耗尽内存 |
--cpus | 限制容器使用宿主机的核心数 |
--cpuset-cpus | 限制容器使用特定的CPU |
--cpu-shares | 此值设置为大于或小于默认1024值,以增加或减少容器的权重,并使其可以访问主机CPU周期更大或更小比例 |
2、docker container 常用管理子命令
子命令 | 用法 |
---|---|
ls | 列出在运行的容器,-a选项列出所有容器 |
inspect | 显示一个或多个容器的详细信息 |
attach | 附加本地标准输入、输出和错误到一个运行的容器(进入容器) |
exec | 在运行容器中执行命令 |
commit | 以一个运行中的容器创建一个新的镜像 |
cp | 宿主机与容器之间进行文件/文件夹的拷贝,用法: docker container cp 宿主机目录 container_name: 目录 |
logs | 获取一个容器的日志 |
port | 列出指定容器端口映射 |
stats | 显示容器资源使用统计 |
top | 显示一个容器运行的进程 |
update | 更新一个或多个运行中容器的配置(内存、CPU) |
stop/start | 停止/启动一个或多个容器 |
rm | 删除一个或多个容器 |
四、管理容器应用程序数据----将宿主机数据挂载到容器中
docker 提供三种不同方式将数据挂载到容器中:
方式 | 区别 |
---|---|
volume 数据卷 | 宿主机数据卷存放目录 /var/lib/docker/volumes |
bind mounts | 可以将宿主机任意位置已经存在的文件挂载到容器中 |
tmpfs | 将宿主机内存中的文件挂载到容器中,不写入宿主机的文件系统 |
1、volume
(1)volume 的创建与子命令
volume子命令 | 含义 |
---|---|
create | 创建一个数据卷 例:# docker volume create nginx-vol;数据会存放在宿主机目录/var/lib/docker/volumes中 |
inspect | 显示数据卷的详细信息 例:# docker volume inspect nginx-vol |
ls | 显示宿主机上存放的数据卷列表 |
prune | 删除所有不在用的数据卷 |
rm | 删除一个或者多个数据卷 |
(2)volume 挂载:在创建容器时挂载volume到容器
(3)清理volume
# docker container stop nginx-test # docker container rm nginx-test # docker volume rm nginx-vol
2、bind mounts
# docker container run -itd --neme nginx-test1 --mount type=bind,src=宿主机目录,dst=/usr/share/nginx/html nginx
注意:bind mounts 方式挂载文件目录时,会隐藏容器目标目录中的文件,只显示宿主机的源文件; 宿主机源文件不存在时,挂载时会报错
五、docker network
1、Docker 支持5种网络模式
(1)bridge
? 默认网络,docker 启动后默认创建一个docker0网桥,默认创建的容也是添加到这个网桥中。
(2)host
?容器不会获得一个独立的network namespace,而是与宿主机共用一个
(3)none
?获取独立的network namespace ,但不为容器进行任何配置网络。
(4)container
? 与指定的容器使用同一个network namespace,网上配置也是相同的
(5)自定义
? 自己义网桥,默认与bridge网络一样。
注意:同一网络中的容器可以通过容器名或主机名进行相互访问,不需要再进行网络配置
2、docker network 子命令
子命令 | 作用 |
---|---|
connect | 连接一个容器,与其共用一个网络 |
create | 创建一个网络 |
disconnect | 断开与容器共用的网络 |
inspect | 查看一个或多个网络的详细信息 |
ls | 显示网络列表 |
prune | 删除所有不在用的网络 |
rm | 删除一个或者多个网络 |
六、通过Dockerfile构建docer 镜像
1、dockerfile 常用指令
指令 | 用法及含义 |
---|---|
FORM | 构建的镜像是基于哪个镜像,例如:FORM contos:7 |
MAINTAINER | 镜像维护者姓名或邮箱地址,例如:MAINTAINER zhouzeheng |
RUN | 构建时运行的shell命令 例如:RUM [“yum”,”install”,”httpd”] ? RUM yum install httpd |
CMD | 运行容器时运行的命令? 例如:CMD [“-c”,”/start.sh”]? CMD [“/usr/sbin/sshd”,-D] ? CMD /usr/sbin/sshd -D |
EXPOSE | 声明容器运行的服务端口,例如:EXPOSE 80 443 |
EVN | 设置容器内环境变量,例如:EVN MYSQL_ROOT_PASSWORD 123456 |
ADD | 拷贝文件或目录到镜像,如果是URL或压缩包会自动下载或解压,例如:ADD <src>...<dest> ? ADD [“<src>”,...”<dest>”] ? ADD https://www.aaa.com/html.tar.gz /var/www/html ? ADD html.tar.gz /var/www/html |
COPY | 拷贝文件或目录到镜像,用法与ADD相当 例如:COPY /root/start.sh /start.sh |
ENTRYPOINT | 运行容器时执行的shell命令,例如 ENTRYPOINT [“/bin/bash”,”-c”,”/start.sh”]? ENTRYPOINT /bin/bash -c ‘/start.sh’ |
VOLUME | 指定容器挂载点到宿主机自动生成的目录或其他容器, 例如:VOLUME /var/lib/mysql |
USER | 为RUN、CDM和ENTRYPOINT执行命令指定运行用户, 例如: USER zhouzeheng |
WORKDIR | 配置容器工作目录,例如:WORKDIR /usr/share/nginx/html |
HEALTHCHECK | 健康检查,例如: HEALTHCHECK --interval=5m --timeout=3s --tetries=3 CMD curl -f http://locahost/ -o exit 1 |
ARG | 在构建镜像时指定一些参数 |
ARG示例:
#在dockerfile里定议变量 FROM contos:7 ARG user USER $user #docker image build --build-arg user=zhouzeheng Dockerfile
2、Dockerfile apache 案例
FROM centos:7 MAINTAINER zhouzeheng RUN yum install -y gcc gcc-c++ make openssl-devel pcre-devel ADD nginx-1.18.0.tar.gz /tmp RUN cd /tmp/nginx-1.18.0 && ./configure --prefix=/usr/local/nginx && make -j 2 && make install RUN rm -rf /tmp/nginx-1.18* && yum clean all EXPOSE 80 CMD ["./usr/local/nginx/sbin/nginx", "-g", "daemon off;"]
3、使用Dockerfile 构建镜像
# docker image build [OPTIONS] PATH|URL|-
OPTIONS:
-t, --tag list 指定镜像名称及版本号 name:tag
-f, --file string 指定Dockerfile文件位置,例如:
# docker image build -t nginx:V1 -f /path/Dockerfile /path(关联上下文目录)
七、私用仓库搭建
1.1 docker官方私有仓库 registry构建
(1)创建挂载目录
# mkdir /tmp/registry
(2)拉取registry镜像
# docker image pull registry
(3)创建registry容器
# docker run -itd --name registry --mounts type=bind,\ src=tmp/registry,dst=/var/lib/registry -p 1000 :5000 --restart=always registry
(4)使用客户机访问刚创建的容器仓库
# curl http://ip:1000/v2/_catalog
1.2 私有仓库管理
(1) 在客户机上配置私有仓库可信任,在/etc/docker/daemon.json 文件大括号中加入一行,
注意:行与行之间用英文逗号隔开
“insecure-registries”:[“192.168.0.107:1000”]
(2)打标签
# docker tag nginx:1.0 192.168.0.107:1000/nginx:1.0
(3)上传镜像到私有仓库
# dokcer push 192.168.0.107:1000/nginx:1.0
(4)从私有仓库下载镜像
# dokcer pull 192.168.0.107:1000/nginx:1.0
(5)列出镜像标签
# curl http://192.168.0.107:1000/nginx/tags/list