0%

快速入门docker

1
2
3
4
5
6
作者: 夜泊1990
企鹅: 1611756908
鹅群: 948233848
邮箱: hd1611756908@163.com
博客: https://hd1611756908.github.io/
B 站: https://space.bilibili.com/514155929/

第一章 Docker简介

1
Docker 是一个开源的应用容器引擎,他可以帮助开发者和开发团队构建和发布应用(开发者将自己的应用打包到这个轻量级可移植的容器中),然后发布到任何流行的Linux平台上面。容器是完全使用沙箱机制,相互之间不会有任何影响,并且容器的开销极低。

第二章 Docker安装

第1节 CentOS系统安装文档地址

1
https://docs.docker.com/engine/install/centos/

第2节 系统需求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
1. Docker 需要Centos7或者8,并且是长期支持版本不能是测试版本
2. 必须启用 centos-extras 存储库,这个库是默认启动的,如果你的电脑禁用这个库,请自行启动.
3. Docker要求Linux内核版本最好是大于3.10版本,因为大于3.10版本的内核包含了运行Docker的特定修改
-> 内核版本查看 uname -r
-> 升级内核 yum install -y kernel (通过yum升级风险最低)
4. 安装 gcc和gcc-c++编译器,如果本机中存在可以不装
-> yum -y install gcc
-> yum -y install gcc-c++
5. 卸载旧版本的docker
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
6. 安装依赖包
-> yum install -y yum-utils device-mapper-persistent-data lvm2
7. 设置stable镜像仓库(官网/阿里云,用哪一个都可以)
-> yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
或者
-> yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
8. 更新yum软件包索引
-> yum makecache fast

第3节 Docker安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
1. 搜索当前的Docker版本,版本由高到低排列  
-> yum list docker-ce.x86_64 --showduplicates | sort -r

docker-ce.x86_64 3:20.10.2-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.2-3.el7 @docker-ce-stable
docker-ce.x86_64 3:20.10.1-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.0-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.9-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.8-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.7-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.6-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.5-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.4-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.3-3.el7 docker-ce-stable

2. 安装指定版本的Docker
-> yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
将上面查到的版本替换下面的<VERSION-STRING>
版本号截取方式在第二列中从冒号(:)开始,短横线(-)结束中间的那段为版本(例如 3:20.10.2-3.el7 的版本为 20.10.2)替换<VERSION_STRING>即可

3. 例如安装命令
-> yum install docker-ce-20.10.2 docker-ce-cli-20.10.2

4. 安装完成启动
-> systemctl start docker
5. 测试
-> docker run hello-world
--> 国外的docker镜像仓库下载镜像缓慢,可以设置国内镜像地址
1. 进入 cd /etc/docker/ 目录下查看是否有daemon.json文件,如果没有就自己手动创建一个
2. 如果存在daemon.json文件将下面的信息保存到daemon.json中
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}

6. 设置开机启动
-> systemctl enable docker

第三章 Docker基本操作命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
1. 查看Docker版本
-> docker version
2. 搜索镜像(例如 搜索一个centos镜像)
-> docker search centos
3. 拉取镜像(例如拉取centos镜像,将其下载到本地)
-> docker pull centos
4. 列出当前Docker平台镜像
-> docker images

以下为本机展示的镜像列表
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 300e315adb2f 4 weeks ago 209MB
hello-world latest bf756fb1ae65 12 months ago 13.3kB

--> REPOSITORY: 镜像仓库源
--> TAG: 镜像的标签
--> IMAGE ID: 镜像ID
--> CREATED: 镜像创建时间
--> SIZE: 镜像大小

5. 删除镜像
-> docker rmi [镜像名称/镜像ID]
--> 参数 -f 强制删除 docker rmi -f [镜像名称/镜像ID]
--> 注意: 在删除镜像的时候最好先将容器(下面介绍)删除,否则可能删除失败
6. 运行镜像
--> docker run [参数][镜像ID/镜像名称]
--> 启动一个centos容器并且后台运行: docker run -itd --name="c01" centos /bin/bash
--> -d 参数: 后台运行
--> -i 参数: 以交互模式运行
--> -t 参数: 为容器分配一个伪终端,常与-i参数一起搭配使用
--> /bin/bash 参数: docker运行一个容器之后,必须保持这个容器里面的任意一个进程运行,否则容器就会在启动之后被杀死,/bin/bash就表示启动容器后启动bash
--> -p 参数: 映射端口号,将容器内的应用的端口号映射到宿主机的端口号
--> --name 参数: 自定义容器名称

7. 查看容器
--> 查看当前正在运行的容器: docker ps
--> -a 参数: 查看当前所有的容器(已运行和未运行) docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b0faa3079666 centos "/bin/bash" 16 minutes ago Up 16 minutes confident_cannon
94eb3d8db458 centos "/bin/bash" 17 minutes ago Up 17 minutes gallant_blackwell
5db82b03c4e5 centos "/bin/bash" 17 minutes ago Up 17 minutes festive_knuth

--> CONTAINER ID:容器ID
--> IMAGE: 镜像
--> COMMAND: 启动容器时运行的命令
--> CREATED: 容器的创建时间
--> STATUS: 容器的运行状态
--> PORTS: 容器运行映射的端口号
--> NAMES: 容器的名称(如果不设置会自动分配)

8. 进入已运行的容(容器必须开启交互模式)
--> 方式一: docker attach [容器ID]
--> 方式二: docker exec -it [容器ID] /bin/bash
9. 从已经进入的容器中退出到宿主机
--> 方式一 exit : 退出后容器被停止
--> 方式二 Ctrl+d : 退出后容器被停止
--> 方式三 Ctrl+p 和 Ctrl+q : 先按Ctrl+p在按Ctrl+q,退出后容器不会停止
10. 启动容器/停止/重启
--> 启动容器: docker start [容器ID]
--> 重启容器: docker restart [容器ID]
--> 停止容器: docker stop [容器ID]
--> 停止全部容器: docker stop $(docker ps -q)
11. 删除容器
--> docker rm [容器ID/容器名称] 删除单个已经停止的容器
--> docker rm $(docker ps -aq) 删除全部已停止的容器

第四章 Docker 运行命令的详细介绍

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Docker运行(run)命令的详细介绍,使用tomcat镜像作为例子演示

1. 拉取tomcat镜像
--> git pull tomcat
2. 运行tomcat(在运行之后首先将宿主机的防火墙关闭,或者是开启8080端口)
--> docker run -p[主机端口号]:[容器端口号] -v [主机目录]:[容器目录] tomcat

eg: docker run --name="tomcat001" -d -p 8080:8080 -v /home/hs/web:/usr/local/tomcat/webapps/ tomcat

--name: 给运行的容器起一个名字
-d : 后台运行
-p : 将宿主机的端口号和容器的端口号想关联
-v : 挂载卷,将容器内的某一个目录挂载到宿主机的某一个目录上,可以实现容器和宿主机的数据共享
-- v mydata:/data 冒号左侧是宿主机地址,冒号右侧是容器内地址

上面的例子-v的意思就是将宿主机/home/hs/web目录的文件共享到容器内部的/usr/local/tomcat/webapps/目录下
比如在/home/hs/web目录下放一个war包项目,就会共享到/usr/local/tomcat/webapps/目录下

第五章 Docker自定义构建镜像

1
2
3
4
1. 为什么要自己构建镜像文件
-> 因为有的时候我们需要的镜像官方不一定有,或者我们需要的镜像功能比较多,官方提供的镜像功能不完善...
2. 怎么自定义一个镜像文件
-> Docker提供了Dockerfile方式进行镜像的构建

第1节 Dockerfile 是什么

1
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明
  • Dockerfile官网地址:

    1
    https://docs.docker.com/engine/reference/builder/

第2节 Dockerfile的使用

1
2
3
4
5
6
使用docker build命令通过Dockerfile构建镜像,构建可以通过本地路径(PATH)或者是网络路径(URL)构建,本地路径是一个本地文件系统,网络路径是一个GIT仓库地址

~$ docker build . //传统方式
~$ docker build -f /path/to/a/Dockerfile . //采用-f参数指定构建哪一个Dockerfile文件
~$ docker build -t fqyb/myapp . //构建完成之后指定一个仓库和标签 -t参数设置新镜像的仓库和标签
~$ docker build -t fqyb/myapp:1.0.0 -t fqyb/myapp:latest . //如果构建完成之后添加到多个仓库可以添加多个-t参数

2.1 Dockerfile常用命令

  • FROM
1
2
3
语法: FROM [<image>] 或者 FROM [<image>:<tag>]

第一条指令必须是FROM,而且,在同一个Dockerfile中创建多个镜像的时候,可以使用多个FROM指令
  • RUN
1
2
3
4
5
语法: RUN <command> 或者 RUN ["executable", "param1", "param2"]

执行一个shell脚本

eg: RUN ["/bin/bash", "-c", "echo hello"]
  • ENV
1
2
3
4
5
6
7
8
9
语法: ENV <key> <value>

就是指定一个环境变量,会被后续的RUN命令使用,并在容器运行时保持

eg:
ENV MYSQL_VERSION 5.6
RUN curl -SL "http://dev.mysql.com/get/Downloads/MySQL-$MYSQL_VERSION/mysql-$MYSQL_VERSION-linux-glibc2.5-x86_64.tar.gz" -o mysql.tar.gz

可以使用$MYSQL_VERSION变量名获取后面的值5.6
  • COPY
1
2
3
语法: COPY <src> <dest>

复制本地主机的<src>为容器的<dest>,目标路径不存在的时候,会自动创建
  • ADD
1
2
3
语法: ADD <src> <dest>

复制指定的<src>到容器的<dest>,其中<src>可以是Dockerfile所在目录的一个相对路径(文件或目录);也可以是一个URL;还可以是一个tar文件(自动解压为目录)
  • EXPOSE
1
2
3
4
5
6
语法: EXPOSE <port> [<port>...]

这条命令告诉容器需要开放的端口号,以提供给互联系统使用,启动容器的时候需要通过-p或者-P来分配这些端口

eg: EXPOSE 80 443 22 8080
eg: docker run -d -p 1022:22 -p 1080:80 -p 1443:443 nginx
  • USER
1
2
3
语法: USER daemon

指定运行容器时候的用户名或者UID,后续RUN也会使用指定的用户
  • WORKDIR
1
2
3
4
5
6
7
8
9
语法: WORKDIR /path/to/workdir

由于Dockerfile中不能使用cd命令,所以我们想要在哪个目录下操作的时候就需要切换进来。为后续的RUN,CMD以及ENTRYPOINT指定工作的目录
可以使用多个WORKDIR命令,如果后面为相对路径,则是针对当前目录确定的

WORKDIR /x
WORKDIR y
WORKDIR z
最后进入的目录就是 /x/y/z /x为根目录 y相对于x目录 z相对于y目录 所以最后就是/x/y/z
  • CMD
1
2
3
4
5
6
语法: 
1. CMD ["executable", "param1", "param2"]使用exec执行,推荐方式。
2. CMD command param1 param2在/bin/sh中执行,提供给需要交互的应用。
3. CMD ["param1", "param2"]提供给ENTRYPOINT的默认参数。

指定启动容器时执行的命令,每一个Dockerfile只能有一条CMD命令,如果有多条的话,只会执行最后一条。如果用户启动容器时指定了运行的命令,则CMD命令会被覆盖掉
  • ENTRYPOINT
1
2
3
语法: ENTRYPOINT ["executable", "param1", "param2"]或ENTRYPOINT command param1 param2(shell中执行)

配置容器启动以后执行的命令,并且不能被docker run命令提供的参数覆盖。每一个Dockerfile只能有一个ENTRYPOINT命令,当存在多个的时候就只有最后一个会生效
  • VOLUME
1
2
3
4
5
语法: VOLUME ["/data"]

Docker容器是基于镜像创建的,在容器运行的时候可能产生一些数据,比如说运行一个MYSQL的容器,这时候会在容器中写入很多数据,如果我们将容器删除,那么整个数据库里面的数据都会被删除.
有没有一种方式可以将容器中产生的数据,保存到宿主机上,这样即便容器被删除,但是我们的数据还在.这个VOLUME属性就可以帮我们实现.
在我们运行Docker容器时候使用 -v参数可以将VOLUME设置的参数映射到宿主机上
  • LABEL
1
2
3
语法: LABEL maintainer="SvenDowideit@home.org.au"

代替MAINTAINER属性,LABEL设置更灵活

2.2 Dockerfile命令使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
1. 创建一个Dockerfile文件(文件名称叫做Dockerfile,没有后缀名)
2. 写一个简单的入门的Dockerfile文件
eg: 自定义一个内置tomcat的镜像(tomcat和基础镜像自己准备)

# 基础镜像
FROM centos

# 作者信息
LABEL "Author"="夜泊1990"

# 将tomcat文件复制到容器的指定位置
COPY ./tomcat /usr/local/tomcat

# 将jdk文件复制到容器的指定位置
COPY ./jdk /usr/local/jdk

# 配置镜像内部JDK的环境变量
ENV JAVA_HOME /usr/local/jdk
ENV PATH $PATH:$JAVA_HOME/bin

# 指定镜像端口号
EXPOSE 8080

# 运行镜像时执行的命令
ENTRYPOINT /usr/local/tomcat/bin/startup.sh && tail -f /usr/local/tomcat/logs/catalina.out

3. docker build -t hs/tomcat:v1.0 .
4. 运行: docker run --name="app001" -d -p 8080:8080 -v /home/hs/web:/usr/local/tomcat/webapps/ hs/tomcat:v1.0
5. 访问: http://192.168.130.128:8080/demo/

第3节 Docker Compose

  • 官网地址
1
https://docs.docker.com/compose/
  • 注意
1
因为Compose只能在单主机上面进行多容器部署,不能在多主机进行容器部署,所以现在基本上都是用K8S进行操作,Compose在跨主机部署中使用较少

3.1 Compose 介绍

1
Compose 是一个可以定义和运行多个docker容器应用的工具,它使用一个YAML文件配置你的应用服务,并且使用一个命令就可以创建和启动配置里面的所有服务.

3.2 Compose 安装

  • 系统需求
1
2
3
4
5
6
1. 首先Linux系统上面要安装了Docker引擎
2. 运行Compose 最好是以一个非root用户运行

创建Linux新用户,并且添加群组
--> 创建群组 groupadd dockerCompose
--> 创建用户并添加进群组 useradd dockerCompose -m -s /bin/false -d /home/dockerCompose -g dockerCompose
  • 安装步骤

    • 下载Compose
    1
    sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    • 给Compose执行权限
    1
    sudo chmod +x /usr/local/bin/docker-compose
    • 设置软连接
    1
    sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
    • 查看Compose版本号
    1
    docker-compose -version
  • 注意事项

1
在下载Compose时,可能会因为网络原因造成下载失败,可以去github上面直接下载源文件然后上传到服务器的/usr/local/bin 目录下即可,如果下载的文件名字不叫docker-compose 可以使用mv命令重新命名为docker-compose

3.3 Compose 使用

3.3.1 使用Compose部署一个web服务器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
1. 创建一个名为docker-compose.yml文件
2. 创建一个Dockerfile文件,docker-compose.yml基于Dockerfile运行(也可以不基于)
3. 准备Dockerfile文件和一个war包作为测试

# 选择镜像
from tomcat
# 作者信息
LABEL "AUTHOR"="夜泊"
# 将测试的web项目部署到tomcat的webapp目录下
COPY ./web.war /usr/local/tomcat/webapps

4. 准备docker-compose.yml文件

version: "2.0" # 版本,一般为2或者3版本
services: # 服务器
web: # 服务器标记名称,名字自定义,为了区分services下的多个服务
build: . # 构建当前根目录下的Dockerfile文件
container_name: 'app01' # 给启动的容器起名字
ports: # 设置容器的宿主机的端口号映射,左侧为宿主机,右侧为容器
- 8081:8080

5. 在当前目录下敲击此命令启动服务: docker-compose up 如果后面带有 -d参数直接后台运行 docker-compose up -d
6. 宿主机浏览器访问 http://192.168.142.128:8081/web/
7. 查看容器的实时日志 docker logs -f 容器ID/容器名称
3.3.2 使用Compose部署两个web服务器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1. 创建一个名为docker-compose.yml文件
2. 创建一个Dockerfile文件,docker-compose.yml基于Dockerfile运行(也可以不基于)
3. 准备Dockerfile文件和一个war包作为测试

# 选择镜像
from tomcat
# 作者信息
LABEL "AUTHOR"="夜泊"
# 将测试的web项目部署到tomcat的webapp目录下
COPY ./web.war /usr/local/tomcat/webapps

4. 准备docker-compose.yml文件

version: "2.0" # 版本,一般为2或者3版本
services: # 服务器
web1: # 服务器标记名称,名字自定义,为了区分services下的多个服务
build: . # 构建当前根目录下的Dockerfile文件
container_name: 'app01' # 给启动的容器起名字
ports: # 设置容器的宿主机的端口号映射,左侧为宿主机,右侧为容器
- 8081:8080
web2: # 服务器标记名称,名字自定义,为了区分services下的多个服务
build: . # 构建当前根目录下的Dockerfile文件
container_name: 'app02' # 给启动的容器起名字
ports: # 设置容器的宿主机的端口号映射,左侧为宿主机,右侧为容器
- 8082:8080

5. 在当前目录下敲击此命令启动服务: docker-compose up 如果后面带有 -d参数直接后台运行 docker-compose up -d
6. 宿主机浏览器访问
-> http://192.168.142.128:8081/web/
-> http://192.168.142.128:8082/web/
3.3.3 使用Compose部署两个web服务器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
相比于3.3.2 
3.3.2 缺点:
1. web1服务build构建Dockerfile生成一个新镜像,并且运行起来
2. web2服务也build构建Dockerfile生成另一个镜像,并且运行起来,缺点就是构建同一个Dockerfile,生成同一个镜像,毫无意义
3.3.3 对3.3.2的docker-compose.yml进行了修改

version: "3.9"
services:
web1:
build: .
image: "web:1.0" # build构建Dockerfile时,生成镜像的镜像仓库名称和TAG版本
container_name: 'app01' # 给启动的容器起名字
ports:
- 8081:8080 # 端口号映射,冒号左侧是宿主机,冒号右侧是容器
web2:
image: "web:1.0" # 第二个服务使用第一个镜像,不在重新构建
container_name: 'app02'
ports:
- 8082:8080

第六章 Docker 仓库

第1节 Docker默认的官方仓库

1
2
3
目前Docker官方维护了一个公共仓库叫做Docker Hub,很多的公共镜像都会发布到Docker Hub中进行共享
我们pull的镜像默认来自于Docker Hub,我们也可以去Docker Hub上面去注册账号,然后将自己构建的镜像发布到Docker Hub中
Docker Hub有点类似于我们的github仓库或者gitee仓库,就是一个存储镜像,一个存储代码.
  • Docker Hub的地址
1
https://registry.hub.docker.com/
  • 注册(略)

第2节 DockerHub仓库数据推送

2.1 登录/登出

1
2
3
4
5
6
7
8
9
10
1. 登录 docker login
--> 登陆成功
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

2. 登出 docker logout
--> 登出
Removing login credentials for https://index.docker.io/v1/

2.2 推送镜像

  • 镜像的命名规范
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
镜像名称命名: dockerhub的登录名/镜像的名称:tag
如果要推送的镜像名字不符合规范可以使用docker tag命令进行重新命名
eg:
1611756908/compose_web1:latest ----> 符合规范的名字
1611756908 : dockerhub账户名称
compose_web1: 仓库名称
latest : TAG
compose_web1:latest ----> 不符合规范的名字
使用命令修改 docker tag compose_web1 1611756908/compose_web1

源镜像: docker images

REPOSITORY TAG IMAGE ID CREATED SIZE
compose_web1 latest 7a8befb5f963 6 minutes ago 649MB
compose_web2 latest 7a8befb5f963 6 minutes ago 649MB
tomcat latest 040bdb29ab37 8 days ago 649MB

修改之后的镜像: docker images

REPOSITORY TAG IMAGE ID CREATED SIZE
1611756908/compose_web1 latest 7a8befb5f963 9 minutes ago 649MB
compose_web1 latest 7a8befb5f963 9 minutes ago 649MB
compose_web2 latest 7a8befb5f963 9 minutes ago 649MB
tomcat latest 040bdb29ab37 8 days ago 649MB
  • 推送
1
2
3
4
5
使用docker push命令进行推送

docker push 1611756908/compose_web1:latest

注意: 推送时使用 REPOSITORY + TAG 方式
  • 登录dockerhub查看
1
2
3
4
5
在进行docker push 时 可能会push多次失败的情况,重试多次即可

可以将本地镜像删除,然后使用pull命令,拉取我们推送到dockerhub上的镜像

docker pull 1611756908/compose_web1

dockerhub

第3节 搭建本地的Docker仓库

2.1 registry库

  • 搭建
1
2
3
4
5
6
7
1. 从远程仓库拉取registry镜像
-> docker pull registry
2. 运行registry镜像
-> docker run -d -v /home/hs/registry:/var/lib/registry -p 5000:5000 --name myregistry registry
-v命令将registry容器内保存镜像的数据挂载到宿主机的/home/hs/registry目录下
3. 访问
-> http://192.168.130.128:5000/v2/
  • 展示

docker

  • 向 registry 库推送镜像
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
推送镜像的方式和DockerHub推送差不多,只是相比于dockerhub他多了一个registry库地址

我在宿主机上面向registry推送数据,由于宿主机和registry在一台机器上面所以IP地址为127.0.0.1或者localhost,如果不在换成其他IP地址即可
相比于dockerhub仓库registry仓库不需要认证(登录操作),所以在给镜像起名字时不需要类似于dockerhub的账号
eg(修改名字):
docker tag compose_web1:latest localhost:5000/compose_web:latest

源镜像: docker images

REPOSITORY TAG IMAGE ID CREATED SIZE
compose_web1 latest 90c23a219728 40 seconds ago 649MB
compose_web2 latest 90c23a219728 40 seconds ago 649MB
tomcat latest 040bdb29ab37 8 days ago 649MB
registry latest 678dfa38fcfa 5 weeks ago 26.2MB

修改之后的镜像: docker images

compose_web1 latest 90c23a219728 About a minute ago 649MB
compose_web2 latest 90c23a219728 About a minute ago 649MB
localhost:5000/compose_web latest 90c23a219728 About a minute ago 649MB
tomcat latest 040bdb29ab37 8 days ago 649MB
registry latest 678dfa38fcfa 5 weeks ago 26.2MB

推送
--> docker push localhost:5000/compose_web:latest

推送成功

The push refers to repository [localhost:5000/compose_web]
7423f9f18aa9: Pushed
9ddc8cd8299b: Pushed
c9132b9a3fc8: Pushed
8e2e6f2527c7: Pushed
500f722b156b: Pushed
7a9b35031285: Pushed
7496c5e8691b: Pushed
aa7af8a465c6: Pushed
ef9a7b8862f4: Pushed
a1f2f42922b1: Pushed
4762552ad7d8: Pushed
latest: digest: sha256:537422d34cfba4ff7d2f22076c332dd76f263e45b68cd09af3c6e7efd236c9ad size: 2628

浏览器访问:
--> http://192.168.142.128:5000/v2/_catalog
  • 从registry 库拉取镜像
1
docker pull localhost:5000/compose_web:latest
  • 注意
1
registry 仓库用起来简单,但是管理功能不足,所以不建议使用.

2.2 harbor库

Harbor 是由 VMware 公司中国团队为企业用户设计的 Registry server 开源项目,包括了权限管理(RBAC)、LDAP、审计、管理界面、自我注册、HA 等企业必需的功能,同时针对中国用户的特点,设计镜像复制和中文支持等功能,据说升级之后有问题,这里不做介绍

2.3 nexus 存储Docker镜像

1
nexus大家都比较熟悉是我们的maven私服搭建的软件,nexus从3版本开始支持了docker镜像仓库,很多企业的docker的镜像仓库都以nexus为主,直接使用docker pull/push 拉/推镜像即可
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
命令:
docker run -d --restart=always -p 8081:8081 -p 8086:8086 --name nexus -v /home/hs/nexus-data:/nexus-data sonatype/nexus3

/home/hs/nexus-data : 此目录结构需要权限 chmod 777 /home/hs/nexus-data 即可

查看日志 docker logs [容器ID]

-------------------------------------------------

Started Sonatype Nexus OSS 3.29.2-02

-------------------------------------------------
打印出以上显示为启动完成

浏览器登录
http://192.168.142.128:8081/

默认用户名密码为 admin/admin123
但是有的时候这个用户密码是不对的,如果显示密码不对,那么使用命令进入容器
1. 进入容器
docker exec -it nexus /bin/bash
2. 进入/opt/sonatype/sonatype-work/nexus3目录下,找到admin.password文件,里面的内容就是密码

3. 这个密码是临时密码,使用此密码登录完后就会消失.

2.3.1 配置nexus的docker镜像仓库

  • 在nexus操作界面创建docker镜像仓库

d1

2

3

5

  • 设置docker的realm

6

7

8

  • 使用docker命令在命令行登录nexus的docker仓库

    • 配置docker服务
    1
    2
    3
    4
    5
    6
    7
    8
    在/etc/docker的daemon.json中添加一行"insecure-registries":["127.0.0.1:8086"]
    {
    "registry-mirrors": ["https://registry.docker-cn.com"],
    "insecure-registries":["127.0.0.1:8086"]
    }
    //配置完成重新启动docker服务以及nexus容器,一般情况重启docker服务容器会自动重启
    systemctl daemon-reload //重新加载守护进程
    systemctl restart docker //重启docker
    • 执行登录/登出命令
    1
    2
    3
    4
    登录:
    docker login 127.0.0.1:8086
    登出:
    docker logout 127.0.0.1:8086
  • 将本地镜像推送到nexus中的docker仓库

1
2
3
4
5
6
1. 先将要上传的镜像打标记,或者叫起名字上面已经介绍过
docker tag registry:latest 127.0.0.1:8086/registry:latest
2. 修改完名字之后,需要执行登录命令
docker login 127.0.0.1:8086
3. 推送
docker push 127.0.0.1:8086/registry:latest
  • 从远程的nexus中拉取镜像到本地
1
docker pull 127.0.0.1:8086/registry:latest

完成,以上就是docker的快速入门…

----------------本文结束感谢您的阅读---------------