Docker安装部署及使用

第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

图片[1]|Docker安装部署及使用|leon的博客

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]
...省略部分输出内容...
  • 说明:
  1. NAME:镜像名称
  2. DESCRIPTION:镜像的描述
  3. STARS:镜像被用户使用的星级
  4. OFFICIAL:镜像是否为官方版本
  5. 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

图片[2]|Docker安装部署及使用|leon的博客

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网络入门

图片[3]|Docker安装部署及使用|leon的博客

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" "-"

图片[4]|Docker安装部署及使用|leon的博客

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

图片[5]|Docker安装部署及使用|leon的博客

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

图片[6]|Docker安装部署及使用|leon的博客# 查看别名设置情况

[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
温馨提示:本文最后更新于2022-12-20 20:57:50,已超过523天没有更新。某些文章具有时效性,若文章内容或图片资源有错误或已失效,请联系站长。谢谢!
转载请注明本文链接:https://blog.leonshadow.cn/763482/861.html
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享