第1章 Docker介绍
Docker是通过内核虚拟化技术(namespaces及cgroups cpu、内存、磁盘io等)来提供容器的资源隔离与安全保障等。由于Docker通过操作系统层的虚拟化实现隔离,所以Docker容器在运行时,不需要类似虚拟机(VM)额外的操作系统开销,提高了资源利用率。
1.1 docker的作用
- 简化配置:Docker将已经将服务打包好,只需运行镜像即可开启服务
- 简化发布过程:因为环境已经高度一致,不会再发生在本地环境运行成功,生产环境不成功的情况
- 提升开发效率:开发人员不需要再考虑环境问题,只要考虑代码本身即可
- 应用隔离:相当于不同应用放在不同机器上,避免相互影响
- debug能力:容器挂了再重启一个即可
- 多租户:docker资源占用少,很多开发可以共用一台机器
1.2 docker的企业应用场景
- 面向营销:服务已配置完好,只要启动就可以直接给客户演示,不需要技术支持了
- 面向开发:简化环境配置
- 面向测试:多版本同步测试,提升测试效率
- 面向运维:多环境一致性
- 面向架构:快速扩容
提示:自动扩容是针对突发、偶发事件的,如果像双11这种情况要提前扩容好。
1.3 使用docker的原因
- 技术储备:别的公司都会我们也要会
- 运维人员要对技术有敏感性
- 符合业务需求
- 产品快速迭代
1.4 docker的目标
- docker的主要目标是"Build,Ship and Run any App,Angwhere"
- 构建:做一个docker镜像
- 运输:docker pull
- 运行:启动一个容器
- 每一个容器,他都有自己的文件系统,
1.5 docker容器虚拟化的优点
- 快速部署
- 轻松迁移
- 资源利用率高
1.6 linux容器虚拟化和kvm虚拟化的区别
- kvm虚拟化: 需要硬件cpu的支持,需要模拟硬件,可以使用不同的操作系统,启动时间分钟级
- 容器虚拟化:严格来说只是进程之间的隔离,不需要模拟硬件,共用宿主机的内核,启动时间秒级
1.7 docker的架构
- docker是传统的CS架构,分为docker client和docker server
- docker的主要组件有:镜像、容器、仓库
第2章 Docker安装部署
2.1 安装Docker
2.1.1 安装依赖文件
[root@docker ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
2.1.2 更新repo源
[root@docker ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo [root@docker ~]# yum-config-manager --enable docker-ce-edge
2.1.3 安装docker
[root@docker ~]# yum install -y docker-ce # 或 [root@docker ~]# yum localinstall -y http://10.0.0.1/docker-ce/linux/centos/7/x86_64/stable/Packages/docker-ce-17.09.0.ce-1.el7.centos.x86_64.rpm
2.2 配置Docker
2.2.1 获取阿里云镜像源
阿里云镜像网址:https://cr.console.aliyun.com
2.2.2 更改docker镜像源
2.2.2.1 方法一:编写json文件
[root@docker ~]# tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://jtxuew6i.mirror.aliyuncs.com"] } EOF
2.2.2.2 方法二:更改启动文件
[root@docker ~]# vim /usr/lib/systemd/system/docker.service ExecStart=/usr/bin/dockerd --registry-mirror=https://jtxuew6i.mirror.aliyuncs.com [root@docker ~]# systemctl daemon-reload
2.2.3 启动docker
[root@docker ~]# systemctl enable docker [root@docker ~]# systemctl start docker
第3章 Docker镜像的操作
3.1 docker帮助
[root@docker ~]# dockerd --help
3.2 搜索网络镜像
【语法】:
docker search [OPTIONS] TERM
【示例】:
[root@docker ~]# docker search nginx NAME DESCRIPTION STARS OFFICIAL AUTOMATED nginx Official build of Nginx. 7326 [OK] jwilder/nginx-proxy Automated Nginx reverse proxy for docker c...1175 [OK] ...省略部分输出内容...
- 说明:
- NAME:镜像名称
- DESCRIPTION:镜像的描述
- STARS:镜像被用户使用的星级
- OFFICIAL:镜像是否为官方版本
- AUTOMATED:镜像是否使用Dockerfile制作
3.3 下载镜像
【语法】:
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
【示例】:
[root@docker ~]# docker pull nginx # 或 [root@docker ~]# docker image pull nginx
3.4 查看本机镜像
【语法】:
docker images # 或 docker image ls
【示例】:
[root@docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest 40960efd7b8f 2 weeks ago 108MB centos 7.2.1511 0a2bad7da9b5 2 weeks ago 195MB
3.5 启动镜像
【语法】:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
【示例】:
- 交互式使用镜像:即可以对镜像内操作
[root@docker ~]# docker run -it centos /bin/bash [root@9a278ae1247f /]#
- 非交互式使用镜像:即运行镜像内的服务
[root@docker ~]# docker run -d -p 80:80 nginx
3.6 导出镜像
【语法】:
docker save [OPTIONS] IMAGE [IMAGE...] docker save 镜像名 > 路径/镜像压缩包
【示例】:
[root@docker ~]# docker save nginx > /tmp/nginx.tar.gz
3.6.1 查看导出镜像
[root@docker ~]# mkdir -p /tmp/nginx [root@docker ~]# tar xf /tmp/nginx.tar.gz -C /tmp/nginx/ [root@docker ~]# cd /tmp/nginx/ [root@docker nginx]# ls 1f8f795722abdf8f8a148d935576f4df617523e7ce30b9b64dcbdac597ad3203 a53cd3c0cd9a4d8487fead2e645cee311483b6491f5bff058977cbb2326242f8 manifest.json 40960efd7b8f44ed5cafee61c189a8f4db39838848d41861898f56c29565266e.json b7dca85d4208526aa66b23f4b4de44449735aaf6240792b4dce8d422a7b71290 repositories
3.7 导入镜像
【语法】:
docker load [OPTIONS] docker load < 路径/镜像压缩包
【示例】:
[root@docker ~]# docker load < /tmp/nginx.tar.gz cec7521cdf36: Loading layer [==================================================>] 58.44MB/58.44MB bba7659ae2e7: Loading layer [==================================================>] 53.65MB/53.65MB f4cc3366d6a9: Loading layer [==================================================>] 3.584kB/3.584kB Loaded image: nginx:latest # 或 [root@docker ~]# docker image load -i /tmp/nginx.tar.gz
3.8 删除镜像
【语法】:
docker rmi [OPTIONS] IMAGE [IMAGE...] -f:强制删除镜像
【示例】:
[root@docker ~]# docker rmi nginx
第4章 Docker容器的操作
4.1 运行容器
【语法】:
docker run 镜像 命令 -i:始终保持标准输入 -t:分配一个tty终端 -v:挂载一个数据卷或创建一个数据容器 -d:以守护进程的模式运行,与--rm参数冲突 -p:指定外网IP和端口给容器 -P:分配外网随机端口给容器 --rm:在容器停止运行时即删除此容器,与-d参数冲突 --name:给容器命名,默认为随机名称 --network:指定容器通过哪种模式连接网络
提示:docker run 相当于 docker create + docker start
【示例】:
[root@docker ~]# docker run -it --name nginx nginx
4.2 查看容器运行情况
【语法】:
docker ps [OPTIONS] -a:查看所有的容器,包括运行和停止的
【示例】:
[root@docker ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 832d1c1a4ff8 nginx "nginx -g 'daemon ..." 36 seconds ago Up 35 seconds 80/tcp nginx
提示:快捷键Ctrl+P,Q(按完P松开后再按Q)退出容器命令行但不退出容器,返回宿主机命令行界面。
4.3 查看容器详细信息
【语法】:
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
【示例】:
[root@docker ~]# docker inspect nginx
4.4 查看后台运行容器的日志文件
【语法】:
docker logs [OPTIONS] CONTAINER -f:实时查看后台容器的日志文件
【示例】:
[root@docker ~]# docker logs nginx 172.17.0.1 - - [20/Nov/2017:06:06:58 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"
4.5 重启容器
【语法】:
docker restart [OPTIONS] CONTAINER [CONTAINER...]
【示例】:
[root@docker ~]# docker restart nginx
4.6 删除容器进程
【语法】:
docker rm [OPTIONS] CONTAINER [CONTAINER...] -f:强制删除容器进程 -v:同时删除磁盘上创建的数据卷,如果创建容器时使用了-v参数则删除时一定要加上-v参数
【示例】:
[root@docker ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9a278ae1247f centos "/bin/bash" 6 minutes ago Up 6 minutes frosty_elion [root@docker ~]# docker rm -f 9a278ae1247f 9a278ae1247f [root@docker ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4.7 进入容器的方式
4.7.1 使用attach命令
【语法】:
docker attach [OPTIONS] CONTAINER
【示例】:
[root@docker ~]# docker attach nginx
提示:此方式不推荐:不安全,且无终端,无法正常操作,只能使用Ctrl+p+q退出。
4.7.2 使用exec命令
【语法】:
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
【示例】:
[root@docker ~]# docker exec -it nginx sh
提示:推荐此方法:可以执行任意操作,不会对其他用户有影响。
4.7.3 使用nsenter命令
[root@docker ~]# yum install -y util-linux [root@docker ~]# vim /server/scripts/docker_in.sh #!/bin/bash pid=`docker inspect --format "{{.State.Pid}}" $1` nsenter -t $pid -m -u -i -n -p [root@docker ~]# sh /server/scripts/docker_in.sh nginx root@750d36f0f03a:/#
提示:不推荐此种方法:太复杂。
4.8 停止容器的方法
4.8.1 使用kill命令
【语法】:
docker kill [OPTIONS] CONTAINER [CONTAINER...]
【示例】:
[root@docker ~]# docker kill nginx # 强制杀死容器
4.8.2 使用stop命令
【语法】:
docker stop [OPTIONS] CONTAINER [CONTAINER...]
【示例】:
[root@docker ~]# docker stop nginx # 等待容器内所有进程结束后停止容器
4.8.3 使用rm命令
【语法】:
docker rm [OPTIONS] CONTAINER [CONTAINER...]
【示例】:
[root@docker ~]# docker rm -f nginx # 直接删除容器
第5章 制作镜像
提示:docker中的容器如果想放在后台运行,需要第一个进程是处于hang的状态,否则这个容器会自动退出。
5.1 制作镜像的原则
最小化镜像,越小越好。
5.2 通过基础镜像自定义镜像
5.2.1 获取基础镜像
[root@docker ~]# docker pull centos
5.2.2 运行基础镜像容器
[root@docker ~]# docker run -it centos:7.2.1511 /bin/bash [root@bc2adacf0145 /]#
5.2.3 基础优化
[root@bc2adacf0145 /]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo [root@bc2adacf0145 /]# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo [root@bc2adacf0145 ~]# echo "10.0.0.90 mirrors.aliyun.com" >> /etc/hosts
5.2.4 制作nginx镜像
[root@bc2adacf0145 ~]# yum install -y nginx [root@bc2adacf0145 ~]# echo "daemon off;" >> /etc/nginx/nginx.conf [root@bc2adacf0145 ~]# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
5.2.5 保存镜像
# 获取基础镜像ID [root@docker ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bc2adacf0145 centos:7.2.1511 "/bin/bash" 13 minutes ago Up 13 minutes boring_wilson # 提交镜像 [root@docker ~]# docker commit -m "add nginx images" bc2adacf0145 leon/nginx-1.12.2 sha256:1bda6d7f053611682dd21340729ea70d6e2bbb7d5b5859c8fd94d9ef59c83e7d [root@docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE leon/nginx-1.12.2 latest 1bda6d7f0536 16 seconds ago 378MB
提示:查看帮助信息:docker commit --help
5.2.6 测试镜像
[root@docker ~]# docker run -d --name nginx-1.12.2 leon/nginx-1.12.2 nginx 72ec453a0602f8bee5b0016683b0b81d057eadd7bbe25334f2c1dacfb250a44e [root@docker ~]#
提示:命令最后的nginx是执行容器中的命令,也可以是/bin/bash、pwd、ls等等。
5.3 通过Dockerfile制作镜像
5.3.1 创建存储Dockerfile的目录
[root@docker ~]# mkdir -p /root/docker [root@docker ~]# cd /root/docker
5.3.2 制作Dockerfile文件
[root@docker docker]# vim Dockerfile # Dockerfile名称区分大小写 # This is dockerfile for nginx # 基础镜像 FROM centos # 维护者信息 MAINTAINER shadow [email protected] # 相关操作 RUN rpm -ivh https://mirrors.aliyun.com/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm RUN yum install -y nginx # 添加文件 ADD index.html /usr/share/nginx/html/index.html # 参数 RUN echo "daemon off;" >> /etc/nginx/nginx.conf # 设置开放端口 EXPOSE 80 # 执行命令 CMD ["nginx"]
5.3.3 制作添加的文件
[root@docker docker]# vim index.html <h1>This is Test page<h1>
5.3.4 制作镜像
[root@docker ~]# docker build -t shadow27/nginx /root/docker
5.3.5 查看制作完成的镜像
[root@docker ~]# docker images | grep "shadow27/nginx" shadow27/nginx latest 45c6a03c3896 43 seconds ago 382MB [root@docker ~]# docker run -d --name "nginx" -p 80:80 shadow27/nginx nginx fcba323e9bf5bbe8a01e7d981a2beb41c326f71046aa5ffbc3fd49e2502d14dc [root@docker ~]# docker ps
5.4 上传镜像到官网hub上
提示:官网HUB:https://hub.docker.com/
5.4.1 登录官网
[root@docker ~]# docker login # docker login 仓库地址(默认官网网址为空) Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one. Username: leonshadow Password: Login Succeeded
5.4.2 获取docker镜像id
[root@docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE leon/nginx-1.12.2 latest 1bda6d7f0536 19 minutes ago 378MB
5.4.3 给镜像打标签
[root@docker ~]# docker tag 1bda6d7f0536 docker.io/leonshadow/nginx-1.12.2
5.4.4 上传镜像到仓库
[root@docker ~]# docker push docker.io/leonshadow/nginx-1.12.2
第6章 docker网络入门
6.1 查看网络驱动
[root@docker ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 214c74aec6fe bridge bridge local 16a7a5ce187e host host local 70b7d182179b none null local
6.1.1 docker网络连接三种方式的区别
- bridge方式是默认的网络配置方案
- host方式是直接走物理网卡的对应端口,也就是一个端口只能对应一个容器且不能和宿主机的服务端口冲突,好处是性能高,因此只适用于单机器跑固定服务的时候,比如只跑一个nginx或tomcat等
- none方式是只有lo网卡,没有其他网卡,需要自行配置网络
6.2 指定容器网络方式
在启动容器的时候通过指定--network参数指定连接方式:
[root@docker ~]# docker run -it --network host nginx
6.3 实现容器的网络访问
6.3.1 随机端口映射,通过外网访问
[root@docker ~]# docker run -d --name "nginx" -P nginx f119ef00f13429f2e6aa33f7ed31b56d5e897a899f92f2234b0250c2c4c05c33 [root@docker ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f119ef00f134 nginx "nginx -g 'daemon ..." 9 seconds ago Up 8 seconds 0.0.0.0:32768->80/tcp nginx [root@docker ~]# docker logs -f nginx 10.0.0.1 - - [20/Nov/2017:07:37:36 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36" "-"
6.3.2 指定端口进行映射
[root@docker ~]# docker run --name "mynginx" -d -p 80:80 leon/nginx-1.12.2 nginx c560e9b949ac4adeb3c6d9ae6e973fae98c30f5256eacb9c408c748c874d7699 [root@docker ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c560e9b949ac leon/nginx-1.12.2 "nginx" 4 seconds ago Up 3 seconds 0.0.0.0:80->80/tcp mynginx
6.3.3 指定协议进行映射
[root@docker ~]# docker run --name "nginx_udp" -d -p 80:80/udp leon/nginx-1.12.2 nginx e37e85b3ca3fcc1ef606da891d9a3cb7620ed5dce7fb7d34b578c99f4f8568cf [root@docker ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e37e85b3ca3f leon/nginx-1.12.2 "nginx" 5 seconds ago Up 3 seconds 0.0.0.0:80->80/udp nginx_udp
6.3.4 指定IP指定端口进行映射
[root@docker ~]# docker run --name "nginx" -d -p 172.16.1.20:80:80 leon/nginx-1.12.2 nginx db01fd86ce04cb04a8a849a4fc4a6a13e25be3c66b6420b8c33c22daec247646 [root@docker ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES db01fd86ce04 leon/nginx-1.12.2 "nginx" 6 seconds ago Up 6 seconds 172.16.1.20:80->80/tcp nginx
6.4 实现容器之间的互联
6.4.1 实现两台容器之间的互联
[root@docker ~]# docker run --name "web01" -d -p 80:80 leon/nginx-1.12.2 nginx [root@docker ~]# docker run -d --name web02 --link web01 -p 8080:80 leon/nginx-1.12.2 nginx 656c968244d239c9928c58af258420ac9ef24f6b8b906434cd11a4c0a802c094 [root@docker ~]# docker ps

6.4.2 配置容器别名
[root@docker ~]# docker run -d --name web03 --link web01:alias_web -p 8081:80 leon/nginx-1.12.2 nginx 82cb361e5b1fc458932fd204e2d97d97b59fdff892aacabeff96e98a454cd7af [root@docker ~]# docker ps

[root@docker ~]# docker exec -it web03 /bin/bash [root@82cb361e5b1f /]# tail -2 /etc/hosts 172.17.0.2 alias_web d33d73d6ac6c web01 172.17.0.4 82cb361e5b1f
提示:可以使用别名连接容器,就不会出现由于容器名发生变化而网络连接不上的情况。
6.5 跨主机之间的互联(pipework)
6.5.1 安装pipework(两台同样操作)
提示:pipework下载地址:https://github.com/jpetazzo/pipework
[root@docker ~]# cd /server/tools/ [root@docker tools]# unzip pipework-master.zip [root@docker tools]# cp pipework-master/pipework /usr/local/bin/ [root@docker tools]# chmod +x /usr/local/bin/pipework
6.5.2 修改主机桥接
6.5.2.1 编辑配置文件
# 创建桥接网卡配置文件 [root@docker ~]# cp /etc/sysconfig/network-scripts/ifcfg-{eth0,br0} # 编辑eth0网卡配置文件 [root@docker ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 TYPE=Ethernet BOOTPROTO=none NAME=eth0 DEVICE=eth0 ONBOOT=yes BRIDGE=br0 # 编辑br0网卡配置文件 [root@docker ~]# vim /etc/sysconfig/network-scripts/ifcfg-br0 TYPE=Bridge BOOTPROTO=none NAME=br0 DEVICE=br0 ONBOOT=yes DNS1=223.5.5.5 IPADDR=10.0.0.11 # docker01宿主机地址 # IPADDR=10.0.0.12 # docker02宿主机地址 PREFIX=24 GATEWAY=10.0.0.254
6.5.2.2 重启网络
[root@docker ~]# systemctl restart network
6.5.3 运行容器
[root@docker01 ~]# docker run -d --net=none --name node01 centos /usr/sbin/init [root@docker02 ~]# docker run -d --net=none --name node02 centos /usr/sbin/init
6.5.4 配置容器IP地址
[root@docker01 ~]# pipework br0 node01 10.0.0.21/[email protected] [root@docker02 ~]# pipework br0 node02 10.0.0.22/[email protected]
6.5.5 查看容器IP地址
6.5.5.1 查看docker01地址
[root@docker01 ~]# docker exec -it node01 /bin/bash [root@4a0b6dab894c /]# hostname -I 10.0.0.21
6.5.5.2 查看docker02地址
[root@docker02 ~]# docker exec -it node02 /bin/bash [root@f285f599646e /]# hostname -I 10.0.0.22
6.5.6 测试网络连通性
[root@4a0b6dab894c /]# ping 10.0.0.22 PING 10.0.0.22 (10.0.0.22) 56(84) bytes of data. 64 bytes from 10.0.0.22: icmp_seq=1 ttl=64 time=0.414 ms 64 bytes from 10.0.0.22: icmp_seq=2 ttl=64 time=0.366 ms [root@f285f599646e /]# ping 10.0.0.21 PING 10.0.0.21 (10.0.0.21) 56(84) bytes of data. 64 bytes from 10.0.0.21: icmp_seq=1 ttl=64 time=0.967 ms 64 bytes from 10.0.0.21: icmp_seq=2 ttl=64 time=0.309 ms
第7章 docker数据管理
7.1 数据卷
7.1.1 创建数据卷
[root@docker ~]# docker run -it --name node -v /data centos /bin/bash [root@8b76060565c1 /]# df -h Filesystem Size Used Avail Use% Mounted on overlay 98G 5.9G 93G 6% / tmpfs 64M 0 64M 0% /dev tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup /dev/sda3 98G 5.9G 93G 6% /data shm 64M 0 64M 0% /dev/shm tmpfs 3.9G 0 3.9G 0% /sys/firmware
7.1.2 删除数据卷
[root@docker ~]# docker rm -fv node node
提示:只要通过-v参数创建的容器一定要使用-v参数删除,否则磁盘会不断增大且不好查找数据卷目录位置
7.1.3 挂载磁盘
[root@docker opt]# docker run -it --name node -v /opt/:/opt/ centos /bin/bash [root@3afbed9ad357 /]# cd /opt/ [root@3afbed9ad357 opt]# ls docker_test [root@3afbed9ad357 opt]# touch test [root@docker opt]# ls docker_test test
7.1.4 挂载文件
[root@docker ~]# docker run -it --name node_host -v /etc/hosts:/opt/hosts centos /bin/bash [root@84a0e580caaa /]# ls /opt hosts
7.2 数据卷容器
7.2.1 创建数据卷容器
[root@docker ~]# docker run -it --name node01 --volumes-from node centos /bin/bash [root@638c6d68b62f /]# df -h Filesystem Size Used Avail Use% Mounted on overlay 98G 5.9G 93G 6% / tmpfs 64M 0 64M 0% /dev tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup /dev/sda3 98G 5.9G 93G 6% /opt shm 64M 0 64M 0% /dev/shm tmpfs 3.9G 0 3.9G 0% /sys/firmware [root@638c6d68b62f /]# ls /opt/ docker_test test
第8章 搭建docker私库
8.1 获取仓库镜像
[root@docker ~]# docker pull registry
8.2 创建私库目录及授权文件
[root@docker ~]# cd /opt [root@docker opt]# mkdir -p auth [root@docker opt]# docker run --entrypoint htpasswd registry -Bbn shadow27 123456 > auth/htpasswd [root@docker opt]# cat auth/htpasswd shadow27:$2y$05$hH9rGuV8H4cjIAyDExBfFuvT9zxifsFjMQVi3nUlD6SNQOBg2cp3C
8.3 启动私库容器
[root@docker opt]# docker run -d -p 6000:5000 --restart=always --name registry1 \ -v `pwd`/auth:/auth \ -e "REGISTRY_AUTH=htpasswd" \ -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \ -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \ registry
8.4 查看私库运行状态
[root@docker ~]# docker ps
8.5 登录私库
[root@docker ~]# docker login 127.0.0.1:6000 Username: shadow27 Password: Login Succeeded
8.6 上传镜像到私库
[root@docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE shadow27/nginx latest 7f8e12d4dc40 17 minutes ago 382MB leon/nginx-1.12.2 latest 1bda6d7f0536 32 hours ago 378MB shadow27/nginx-1.12.2 latest 1bda6d7f0536 32 hours ago 378MB nginx latest 40960efd7b8f 2 weeks ago 108MB registry latest a07e3f32a779 2 weeks ago 33.3MB centos 7.2.1511 0a2bad7da9b5 2 weeks ago 195MB centos latest d123f4e55e12 2 weeks ago 197MB [root@docker ~]# docker tag 7f8e12d4dc40 127.0.0.1:6000/shadow27/nginx [root@docker ~]# docker push 127.0.0.1:6000/shadow27/nginx
8.7 从私库下载镜像
[root@docker ~]# docker pull 127.0.0.1:6000/shadow27/nginx [root@docker ~]# docker images | grep "127.0.0.1" 127.0.0.1:6000/shadow27/nginx latest 7f8e12d4dc40 25 minutes ago 382MB

我的微信
如果有技术上的问题可以扫一扫我的微信