Docker笔记


1. Docker是什么

了解Docker是什么、应用场景及其组成部分

  • Docker是一个应用容器引起;
  • 应用场景:web的自动化打包发布,自动化测试、可持续集成,安装各种组件;
  • 与传统虚拟机比较:docker启动速度比较快,占用体积较小;
  • 组成:docker守护进程,仓库,镜像,容器,docker客户端

2. Docker安装与启动

2.1安装Docker

Docker官方建议在Ubuntu中安装,因为Docker是基于Ubuntu发布的,而且一般Docker出现的问题Ubuntu是最先更新或者打补丁的。

在很多版本的CentOS中是不支持更新最新的一些补丁包的。

由于我们学习的环境都使用的是CentOS,因此这里我们将Docker安装到CentOS上。注意:这里建议安装在CentOS7.x以上的版本,在CentOS6.x的版本中, 安装前需要安装其他很多的环境而且Docker很多补丁不支持更新。

请直接挂载课程配套的Centos7.x镜像

  1. yum包更新到最新

    sudo yum update
  2. 安装需要的软件包,yum-util 提供yum-config manager功能,另外两个是devicemapper驱动依赖的

    sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    
    
    [root@iZwz97sm51bf4kxapt7xzvZ ~]# sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    Last metadata expiration check: 1:17:33 ago on Mon 04 Apr 2022 12:05:30 PM CST.
    Dependencies resolved.
    ...
    ...
    ...
    Installed:
      device-mapper-event-8:1.02.175-5.1.al8.x86_64      device-mapper-event-libs-8:1.02.175-5.1.al8.x86_64      device-mapper-persistent-data-0.9.0-4.al8.x86_64     
      libaio-0.3.112-1.2.al8.x86_64                      lvm2-8:2.03.11-5.1.al8.x86_64                           lvm2-libs-8:2.03.11-5.1.al8.x86_64                   
      yum-utils-4.0.21-4.al8.noarch                     
    
    Complete!
    [root@iZwz97sm51bf4kxapt7xzvZ ~]#
  3. 设置yum源为阿里云

    sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    [root@iZwz97sm51bf4kxapt7xzvZ ~]# sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    Adding repo from: http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    [root@iZwz97sm51bf4kxapt7xzvZ ~]#
  4. 安装docker

    sudo yum install docker-ce   # docker-ce为社区版,docker-ee企业版
  5. 安装后查看docker版本

    docker -v
    [root@iZwz97sm51bf4kxapt7xzvZ ~]# docker -v
    Docker version 20.10.14, build a224086
    [root@iZwz97sm51bf4kxapt7xzvZ ~]# 

到此为止,docker就安装完成了。

更新yum源为ustc

  • ustc是老牌的linux镜像服务提供者了,还在遥远的ubuntu 5.04版本的时候就在用。ustc的docker镜像加速器速度很快。ustc docker mirror的优势之一就是不需要注册,是真正的公共服务。https://ug.ustc.edu.cn/wiki/mirrors/help/docker

  • 编辑该文件

    vi /etc/docker/daemon.json

    在该文件中输入如下内容:

    {
    "registry-mirrors": [ "https://docker.mirrors.ustc.edu.cn"]
    }

需求更新 yum 源和镜像源安装docker;安装之后可以使用 docker -v

# 启动
systemctl start docker
# 停止
systemctl stop docker

# 重新启动docker

systemctl restart docker

#查看docker启动状态
systemctl status docker

# 开机自动启动
systemctl enable docker 

查看当前的ip

[root@iZwz97sm51bf4kxapt7xzvZ ~]# ip addr

3. 镜像相关命令

3.1查看镜像

docker images

REPOSITORY:镜像名称

TAG:镜像标签

IMAGE ID:镜像ID

CREATED:镜像的创建日期(不是获取该镜像的日期)

SIZE:镜像大小

这些镜像都是存储在Docker宿主机的/var/ib/docker目录下

搜索镜像

docker search  centos

拉取镜像

docker pull tutum/centos

分析

  1. 拉取镜像(容器是基于镜像运行);
  2. 创建并启动交互式容器,docker交互式容器(启动容器之后会直接进入容器的命令行终端,如果退出则容器停止运行)

删除镜像

docker rmi 镜像id

删除所有镜像

docker rmi `docker images -q`

小结

拉取:docker pull 镜像名称:版本号(若不指定则会拉取最新的版本)

删除全部镜像:docker rmi ` docker images -q ` (慎用)

4. 查看&创建并启动交互式容器

查看正在运行的容器

docker ps

查看所有容器

docker ps -a

查看最后一次运行的容器

docker ps -l

查看停止的容器

docker ps -f status=exited

小结

# 查看容器
docker ps -a

# 创建并启动交互式容器
docker run -it --name=mycentos7 centos:7 /bin/bash

#退出
exit

启动交互式容器之后是直接进入容器终端;可以查看容器的文件结构;使用exit命令则会退出终端并且停止容器。

5. 创建并启动守护式容器

创建容器常用的参数说明:

创建容器命令: docker run

-i:表示运行容器

-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。

--name :为创建的容器命名。

-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。

-d:在run后面加上-d参数则会创建一个守护式容器在后 台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。

-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射

  1. 交互式方式创建容器

    docker run -it --name = 容器名称 镜像名称:标签 /bin/bash
    
    [root@iZwz97sm51bf4kxapt7xzvZ ~]# docker run -it --name=mysql mysql:latest /bin/bash # 已经进去MySQL容器
    root@d843bd189299:/# 

    这时我们通过ps命令查看,发现可以看到启动的容器,状态为启动状态

    退出当前容器

    exit # 当我们退出来的时候容器就已经停止了
  2. 守护式方式创建容器

    docker run -di --name = 容器名称镜像名称:标签

    登录守护式容器方式:

    docker exec -it 容器名称(或者容器ID) /bin/bash

分析

创建并启动docker容器,可以在后台运行;

在创建交互式容器之后如果退出的话,容器处于停止状态,可以使用命令再次启动容器,使用命令进入容器并操作。

# 创建并启动守护式容器
docker run -di --name=mycentos2 centos:7

# 启动容器后再进入容器
docker exec -it mycentos2 /bin/bash

小结

守护式容器在启动之后会一直在后台运行,即使进入容器之后执行exit命令也不会停止容器;

适用于需要长期运行容器的情况

6. 停止&拷贝&挂载&查看ip&删除容器

6.1 停止与启动容器

停止容器:

docker stop 容器名称(或者容器ID)

启动容器:

docker start 容器名称(或者容器ID)
[root@iZwz97sm51bf4kxapt7xzvZ ~]# docker start mysql
mysql
[root@iZwz97sm51bf4kxapt7xzvZ ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS         PORTS                 NAMES
d843bd189299   mysql:latest   "docker-entrypoint.s…"   25 minutes ago   Up 3 seconds   3306/tcp, 33060/tcp   mysql
[root@iZwz97sm51bf4kxapt7xzvZ ~]# docker stop mysql
mysql
[root@iZwz97sm51bf4kxapt7xzvZ ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@iZwz97sm51bf4kxapt7xzvZ ~]#  

6.2 文件拷贝

如果我们需要将文件拷贝到容器内可以使用cp命令

docker cp 需要拷贝的文件或目录容器名称:容器目录

也可以将文件从容器内拷贝出来

docker cp 容器名称:容器目录需要拷贝的文件或目录
eg:
docker cp anaconda-ks. cfg mycentos2:/usr/ local # 复制
docker exec -it mycentos2 /bin/ bash # 进去容器看看是否成功
exit # 退出
docker cp mycentos2:/usr/local/anaconda-ks.cfg anaconda-ks2.cfg # 将文件从容器内拷贝出来

6.3 目录挂载

我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。创建容器添加V参数后边为宿主机目录:容器目录,例如:

docker run -di -V /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7

如果你共享的是多级的目录,可能会出现权限不足的提示。

这是因为CentOS7中的安全模块selinux把权限禁掉了,我们需要添加参数 -privileged=true 来解决挂载的目录没有权限的问题

6.4 查看容器IP地址

我们可以通过以下命令查看容器运行的各种数据

docker inspect 容器名称(容器ID)
[root@iZwz97sm51bf4kxapt7xzvZ ~]# docker inspect mysql5

也可以直接执行下面的命令直接输出IP地址

docker inspect -- format='{{ NetworkSettings.IPAddress}}' 容器名称(容器ID)

6.5 删除容器

删除指定的容器:

docker rm 容器名称(容器ID)

目标:能够使用容器的停止、拷贝文件、目录挂载、查看IP、删除命令

小结

  • 容器停止、启动

  • 拷贝文件:容器与宿主机之间的文件互拷

  • 目录挂载:将宿主机的目录映射到容器对于目录

  • 查看容器IP

  • 容器删除:只能删除停止状态的容器;docker rm `docker ps -a -q`

7. MySQL容器部署

记得上去阿里云,先把一些端口号开了

  1. 拉取mysql镜像

    docker pull centos/mysq1-57-centos7
  2. 创建容器

    docker run -di --name=tensquare_mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

-p代表端口映射,格式为宿主机映射端口:容器运行端口

-e代表添加环境变量MYSQ _ROOT_PASSWORD是root用 户的登陆密码

  1. 进入mysql容器

    docker exec -it tensquare_mysq1 /bin/bash 
    
    
    [root@iZwz97sm51bf4kxapt7xzvZ ~]# docker ps
    CONTAINER ID   IMAGE      COMMAND                  CREATED              STATUS              PORTS                                                  NAMES
    409936706b58   mysql      "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   tensquare_mysql
    b1929a2a0715   tomcat     "catalina.sh run"        42 minutes ago       Up 42 minutes       0.0.0.0:9000->8080/tcp, :::9000->8080/tcp              mytomcat
    9a63583f2c8c   registry   "/entrypoint.sh /etc…"   5 hours ago          Up 3 hours          0.0.0.0:5000->5000/tcp, :::5000->5000/tcp              registry
    4cc709c8cfa0   nginx      "/docker-entrypoint.…"   9 hours ago          Up 40 minutes       0.0.0.0:80->80/tcp, :::80->80/tcp                      nginx
    [root@iZwz97sm51bf4kxapt7xzvZ ~]# docker exec -it mysql /bin/bash
    Error: No such container: mysql
    [root@iZwz97sm51bf4kxapt7xzvZ ~]# docker exec -it 409936706b58  /bin/bash
    root@409936706b58:/# mysql -uroot -p
    Enter password: 
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 8
    Server version: 8.0.28 MySQL Community Server - GPL
    
    Copyright (c) 2000, 2022, Oracle and/or its affiliates.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> ALTER USER 'root'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> flush privileges;
    Query OK, 0 rows affected (0.01 sec)
    
    mysql>
  2. 登陆mysql

    mysql -u root -p
  3. navicat远程连接MySQL。(这一步操作之前,先检查阿里云端口3306,是否打开)

    1. 修改加密规则

      ALTER USER 'root'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
    2. 更新一下用户的密码

      ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
    3. 刷新权限

      flush privileges;

使用图形界面工具(windows)操作在docker中安装的mysql;在创建mysql容器的时候使用-p指定端口映射实现连接

在创建容器的时候mysqlroot用户可以指定远程访问的密码。

小结

在创建容器的时候指定环境变量MYSQL_ROOT_PASSWORD表示使用root进行远程连接时候的密码。如果需要进行远程连接的话可以使用-p进行端口映射。

8. Tomcat容器部署

目标:拉取tomcat镜像,启动容器,操作容器中的tomcat

分析

  • 将项目文件上传到容器中的tomcat目录(webapps)

    创建容器的时候可以指定-v进行目录挂载,tomcat在容器中的目录(/usr/local/tomcat/webapps)

  • 可以通过外部浏览器访问容器中的项目

    创建容器的时候可以指定-p进行端口映射

  1. 拉取tomcat镜像;

    docker pull tomcat
  2. 创建并启动tomcat容器;

docker run -di --name=mytomcat -p 9000:8080 -v /usr/local/tomcat/webapps:/usr/local/tomcat/webapps tomcat
  1. 访问容器中tomcat

    http://120.25.145.188:9000

小结

上传项目文件可以使用容器的目录挂载功能,外部访问可以使用端口映射

9. Nginx容器部署

  1. 拉取nginx镜像

    docker pull nginx
  2. 创建容器

    docker run -di --name = mynginx -p 80:80 nginx
    
    [root@iZwz97sm51bf4kxapt7xzvZ ~]# docker run -di --name=nginx -p 80:80 nginx
    4cc709c8cfa0f1398775e54fac8c3079652182446e0228a71d7ce7a300fa7e19
    [root@iZwz97sm51bf4kxapt7xzvZ ~]#
  3. 访问:http://120.25.145.188:80

nginx的默认访问端口是:80

在创建容器的时候需要进行端口映射,指定-p,映射的端口80

  1. 拉取nginx镜像;
  2. 创建并启动nginx容器;
  3. 在浏览器上访问容器中nginx,http://120.25.145.188:80

小结

如果被占用了80端口,那么在指定映射的时候可以改变宿主机的端口映射,在访问时也需要带上端口号。

10. Redis容器部署

分析

  1. 拉取redis镜像;

    docker pull redis
  2. 创建并启动redis容器;默认端口是6379,如果需要外部访问则可以使用端口映射;

    # 创建容器
    docker run -di --name=myredis -p 6379:6379 redis
    # 进入容器
    docker exec -it myredis /bin/bash
  3. 连接redis: ①使用命令行客户端 ②使用图形界面工具

11. 迁移与备份

容器保存为镜像

我们可以通过以下命令将容器保存为镜像

docker commit mynginx mynginx_i

# 保存成功
[root@iZwz97sm51bf4kxapt7xzvZ ~]# docker images
REPOSITORY                TAG       IMAGE ID       CREATED         SIZE
mynginx_i                 latest    5fec3772aedd   2 seconds ago   141MB
tomcat                    latest    b00440a36b99   4 days ago      680MB
mysql                     latest    667ee8fb158e   7 days ago      521MB
redis                     latest    bba24acba395   7 days ago      113MB
nginx                     latest    12766a6745ee   7 days ago      141MB
centos/mysql-57-centos7   latest    f83a2938370c   2 years ago     452MB

docker run -di --name=mynginx2 -p 81:80 mynginx_i 
# 访问 http://120.25.145.188:81

镜像备份
我们可以通过以下命令将镜像保存为tar文件

docker save -o mynginx.tar mynginx_i

[root@iZwz97sm51bf4kxapt7xzvZ ~]# docker save -o mynginx.tar mynginx_i
[root@iZwz97sm51bf4kxapt7xzvZ ~]# dir
mynginx.tar

镜像恢复与迁移

首先我们先删除掉mynginx_ jimg镜像然后执行此命令进行恢复

docker load -i mynginx.tar

-i输入的文件

执行后再次查看镜像,可以看到镜像已经恢复

12. docker-compose简介&安装

目标:docker-compose的作用;能够安装docker-compose

小结

docker-compose是一个应用工具;可以通过配置docker-compose.yml文件同时启动多个容器。

部署项目时可以编写一个docker-compose.yml文件作为启动项目单位,同时启动项目相关的那些容器。

13. docker-compose应用

目标:编写模版文件同时启动docker容器

分析

docker-compose可以实现一次启动多个容器;通过配置docker-compose模板文件(docker-compose.yml),在这个配置文件中去配置各个容器及其相关的依赖。

  1. 编写模板文件;
  2. 创建并启动docker-compose项目(模板文件所在的目录,docker-compose.yml)
  3. 测试

小结

docker-compose可以配置一个模板文件实现一次可以启动多个容器,运行时候可以执行一个up则会创建并启动模板文件中的各个服务。

模板文件是yml格式的;编写的时候需要注意其格式。

14. 迁移与备份

目标:能够将容器保存为镜像,备份,恢复镜像再启动以恢复的镜像作为基础的容器

分析

在当前的容器中安装了各种组件;期望在其他服务器上也能快速拥有该容器的一切环境;可以将当前的容器制作为一个镜像,再将该奖项复制到其他服务器,其他服务器再基于镜像运行容器。

  1. 将容器保存为一个镜像;
  2. 备份镜像;
  3. 恢复镜像;
  4. 基于镜像运行容器

小结

docker容器可以保存为一个镜像;备份为一个镜像包(*.tar)可以复制迁移到其他服务器,再恢复该tar包中的镜像,基于镜像运行容器实现环境的一致。

15. 使用Dockerfile创建镜像

14.1 什么是Dockerfile

Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像 。

  1. 对于开发人员:可以为开发团队提供一个完全一 致的开发环境;
  2. 对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了;
  3. 对于运维人员:在部署时,可以实现应用的无缝移植。

14.2 常用命令命令

命令 作用
FROM image name:tag 定义了使用哪个基础镜像启动构建流程
MAINTAINER user_ name 声明镜像的创建者
ENV key value 设置环境变量(可以写多条)
RUN command 是Dockerfile的核心部分(可以写多条)
ADD source_ dir/file dest_ dir/file 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
COPY source_ dir/file dest_ dir/file 和ADD相似,但是如果有压缩文件并不能解压
WORKDIR path_ dir 设置工作目录

使用Dockerfile创建一个自定义jdk1.8的镜像

分析

假设在centos7作为基础镜像上;添加jdk1.8并构建一个包含jdk1.8的centos7新镜像。

– Dockerfile可以实现;Dockerfile是由一系列命令和参数构成的文本文件,在文件中可以指定各个组件资源和运行命令等。

实现步骤:

  1. 拉取centos7镜像;
  2. 上传jdk1.8;
  3. 编写Dockerfile文件;
  4. 构建镜像;
  5. 测试(基于新镜像创建并运行容器,运行java -version)

小结

Dockerfile可以基于镜像制作镜像;docker build -t='jdk1.8' .

[root@iZwz97sm51bf4kxapt7xzvZ dockerjdk8]# vi Dockerfile  # 编写Dockerfile文件
[root@iZwz97sm51bf4kxapt7xzvZ dockerjdk8]# cat Dockerfile 
FROM centos:7
MAINTAINER nateshao
WORKDIR /usr
RUN mkdir /usr/local/java
ADD jdk-8u161-linux-x64.tar.gz /usr/local/java

ENV JAVA_HOME /usr/local/java/jdk1.8.0_161 
ENV JAR_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/bin/dt.jar:$JAVA_HOME/lib/tools/jar:$JAE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
[root@iZwz97sm51bf4kxapt7xzvZ dockerjdk8]# docker build -t='jdk1.8' .    # 执行 -t:指定镜像名称  .指当前的Dockerfile文件
Sending build context to Docker daemon  575.5MB
Step 1/9 : FROM centos:7
7: Pulling from library/centos
2d473b07cdd5: Pull complete 
Digest: sha256:c73f515d06b0fa07bb18d8202035e739a494ce760aa73129f60f4bf2bd22b407
Status: Downloaded newer image for centos:7
 ---> eeb6ee3f44bd
Step 2/9 : MAINTAINER nateshao
 ---> Running in 52ef4d3e4150
Removing intermediate container 52ef4d3e4150
 ---> eaef68b5e34c
Step 3/9 : WORKDIR /usr
 ---> Running in 1cd9559b9c5a
Removing intermediate container 1cd9559b9c5a
 ---> a3e3e2ee5f40
Step 4/9 : RUN mkdir /usr/local/java
 ---> Running in 3f4db6ae3685
Removing intermediate container 3f4db6ae3685
 ---> a0b910ff061e
Step 5/9 : ADD jdk-8u161-linux-x64.tar.gz /usr/local/java
 ---> 33a70ca25db8
Step 6/9 : ENV JAVA_HOME /usr/local/java/jdk1.8.0_161
 ---> Running in 4261fa4976ff
Removing intermediate container 4261fa4976ff
 ---> 6d8879663b2a
Step 7/9 : ENV JAR_HOME $JAVA_HOME/jre
 ---> Running in c1ff5f3c5f76
Removing intermediate container c1ff5f3c5f76
 ---> 87f867d8b627
Step 8/9 : ENV CLASSPATH $JAVA_HOME/bin/dt.jar:$JAVA_HOME/lib/tools/jar:$JAE_HOME/lib:$CLASSPATH
 ---> Running in 3a8531131bc2
Removing intermediate container 3a8531131bc2
 ---> a27d96cec297
Step 9/9 : ENV PATH $JAVA_HOME/bin:$PATH
 ---> Running in 68626ccfe53d
Removing intermediate container 68626ccfe53d
 ---> 889915745bd6
Successfully built 889915745bd6
Successfully tagged jdk1.8:latest   

.... 到这里就构建成功了
docker images 看看
[root@iZwz97sm51bf4kxapt7xzvZ local]# docker images   # 可以看到jdk.8已经有了
REPOSITORY                TAG       IMAGE ID       CREATED         SIZE
jdk1.8                    latest    889915745bd6   3 minutes ago   588MB
mynginx_i                 latest    5fec3772aedd   2 hours ago     141MB
tomcat                    latest    b00440a36b99   4 days ago      680MB
mysql                     latest    667ee8fb158e   7 days ago      521MB
redis                     latest    bba24acba395   7 days ago      113MB
nginx                     latest    12766a6745ee   7 days ago      141MB
centos                    7         eeb6ee3f44bd   6 months ago    204MB
centos/mysql-57-centos7   latest    f83a2938370c   2 years ago     452MB

运行并查看jdk

[root@iZwz97sm51bf4kxapt7xzvZ local]# docker run -it jdk1.8 /bin/bash
[root@c6764a7159c9 usr]# java
Usage: java [-options] class [args...]
    
[root@c6764a7159c9 usr]# java -version 
java version "1.8.0_161"
Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)
[root@c6764a7159c9 usr]# exit
exit
[root@iZwz97sm51bf4kxapt7xzvZ local]# 

16. 私有仓库搭建与配置

  1. 拉取私有仓库镜像(此步省略)

    docker pull registry
  2. 启动私有仓库容器

    docker run -di --name=registry -p 5000:5000 registry
  3. 打开浏览器输入地址 http://120.25.145.188:5000/v2/_catalog 看到(“repositories”:0]表示私有仓库搭建成功并且内容为空

  4. 修改daemon.json

    vi /etc/docker/daemon.json

​ 添加以下内容,保存退出。

{
    "registry-mirrors":["https://docker.mirrors.ustc.edu.cn"],
    "insecure-registries":["120.25.145.188:5000"]
}

​ 此步用于让docker信任私有仓库地址

  1. 重启docker服务

    systemctl restart docker
    
    重启之后,还需要重新启动registry哦
    docker start registry

小结

拉取registry镜像;基于镜像创建私有仓库容器;需要去修改docker的一个配置文件指定私有仓库地址;再访问私有仓库:http://ip:5000/v2/_catalog

17. 将镜像上传至私有仓库

  1. 标记此镜像为私有仓库的镜像

    docker tag jdk1.8 120.25.145.188:5000/jdk1.8
  2. 上传标记的镜像

    docker push 120.25.145.188:5000/jdk1.8

  3. 如果push不上去的话,检查阿里云的端口开通了没哦

    [root@iZwz97sm51bf4kxapt7xzvZ dockerjdk8]# docker start registry
    registry
    [root@iZwz97sm51bf4kxapt7xzvZ dockerjdk8]# docker push 120.25.145.188:5000/jdk1.8

小结

将本地镜像打标签(标记本地镜像为一个私有仓库中的镜像);将打了标签的镜像推送到私有仓库。

18. 从私有仓库拉取镜像

目标:将私有仓库中的jdk1.8镜像拉取到本地

小结

  • 私有仓库与拉取镜像的服务器是在同一台机器上:直接拉取镜像; docker pull 私有仓库地址/镜像名称
  • 私有仓库与拉取镜像的服务器是不在同一台机器上:需要去修改docker的配置文件,指定私有仓库地址;再执行拉取镜像的命令。

如果本地存在同名的镜像需要先删除镜像后拉取


文章作者: 千羽
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 千羽 !
评论
  目录