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常用命令
1 2 3 语法: FROM [<image>] 或者 FROM [<image>:<tag>] 第一条指令必须是FROM,而且,在同一个Dockerfile中创建多个镜像的时候,可以使用多个FROM指令
1 2 3 4 5 语法: RUN <command> 或者 RUN ["executable", "param1", "param2"] 执行一个shell脚本 eg: RUN ["/bin/bash", "-c", "echo hello"]
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
1 2 3 语法: COPY <src> <dest> 复制本地主机的<src>为容器的<dest>,目标路径不存在的时候,会自动创建
1 2 3 语法: ADD <src> <dest> 复制指定的<src>到容器的<dest>,其中<src>可以是Dockerfile所在目录的一个相对路径(文件或目录);也可以是一个URL;还可以是一个tar文件(自动解压为目录)
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
1 2 3 语法: USER daemon 指定运行容器时候的用户名或者UID,后续RUN也会使用指定的用户
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
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命令会被覆盖掉
1 2 3 语法: ENTRYPOINT ["executable", "param1", "param2"]或ENTRYPOINT command param1 param2(shell中执行) 配置容器启动以后执行的命令,并且不能被docker run命令提供的参数覆盖。每一个Dockerfile只能有一个ENTRYPOINT命令,当存在多个的时候就只有最后一个会生效
1 2 3 4 5 语法: VOLUME ["/data"] Docker容器是基于镜像创建的,在容器运行的时候可能产生一些数据,比如说运行一个MYSQL的容器,这时候会在容器中写入很多数据,如果我们将容器删除,那么整个数据库里面的数据都会被删除. 有没有一种方式可以将容器中产生的数据,保存到宿主机上,这样即便容器被删除,但是我们的数据还在.这个VOLUME属性就可以帮我们实现. 在我们运行Docker容器时候使用 -v参数可以将VOLUME设置的参数映射到宿主机上
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
安装步骤
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
1 sudo chmod +x /usr/local/bin/docker-compose
1 sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
注意事项
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仓库,就是一个存储镜像,一个存储代码.
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 方式
1 2 3 4 5 在进行docker push 时 可能会push多次失败的情况,重试多次即可 可以将本地镜像删除,然后使用pull命令,拉取我们推送到dockerhub上的镜像 docker pull 1611756908/compose_web1
第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/
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
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镜像仓库
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
1 docker pull 127.0.0.1:8086/registry:latest
完成,以上就是docker的快速入门…