Docker
容器数据卷
什么是容器数据卷
docker的理念回顾
将应用和环境打包成一个镜像!
数据?如果数据都在容器中,那么我们容器删除,数据就会丢失!需求:数据可以持久化
MySQL,容器删除了,删库跑路!需求:MySQL数据可以存储在本地!
容器之间可以有一个数据共享的技术!Docker容器中产生的数据,同步到本地!
这就是卷技术!目录的挂载,将我们容器内的目录,挂载到Linux上面!
总结一句话:容器的持久化和同步操作!容器间也是可以数据共享的!
使用数据卷
方式一 :直接使用命令挂载 -v
-v, --volume list Bind mount a volume
docker run -it -v 主机目录:容器内目录 -p 主机端口:容器内端口
➜ ~ docker run -it -v /home/ceshi:/home centos /bin/bash
#通过 docker inspect 容器id 【查看容器详细信息】
测试文件的同步
再来测试!
1、停止容器
2、宿主机修改文件
3、启动容器
4、容器内的数据依旧是同步的
就算容器关闭了,主机对映射的文件修改,容器再启动,也是同步的
修改是双向的!!!,容器删除文件 ,那主机也会删除文件
好处:我们以后修改只需要在本地修改即可,容器内会自动同步!
实战:安装MySQL
思考:MySQL的数据持久化的问题
# 获取mysql镜像
➜ ~ docker pull mysql:5.7
# 运行容器,需要做数据挂载 #安装启动mysql,需要配置密码的,这是要注意点!
# 参考官网hub
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
#启动我们得
-d 后台运行
-p 端口映射
-v 卷挂载
-e 环境配置
-- name 容器名字
➜ ~ docker run -d -p 5321:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=-e MYSQL_ROOT_PASSWORD=00000 --name mysql01 mysql:5.7
# 启动成功之后,我们在本地使用sqlyog来测试一下
# sqlyog-连接到服务器的5321--和容器内的3306映射
# 在本地测试创建一个数据库,查看一下我们映射的路径是否ok!
假设我们将容器删除
发现,我们挂载到本地的数据卷依旧没有丢失,实现了容器数据持久化功能
具名和匿名挂载
# 匿名挂载
-v 容器内路径 [没有指定容器外主机的路径]
docker run -d -P --name nginx02 -v /ect/nginx nginx
# 查看所有 volume[容器数据卷] 的情况
[root@izbp1h9ynqgizuhp85e2xkz data]# docker volume ls
下面的乱七八糟乱码的就是匿名挂载,只写了容器内路径,没有写容器外的路径
# 具名挂载
-v 卷名:容器内路径
docker run -d -P --name nginx03 -v juming-nginx:/etc/nginx nginx
# 查看具名挂载的具体详细信息
docker volume inspect juming-nginx
所有的docker容器内的卷,没有指定目录的情况下都是在 /var/lib/docker/volumes/xxxx/_data
下
如果指定了目录,docker volume ls 是查看不到的
我们通过具名挂载可以方便的找到我们的 一个卷 ,大多数情况在使用具名挂载
如何确定是具名挂载、匿名挂载、指定路径挂载?
# 三种挂载: 匿名挂载、具名挂载、指定路径挂载
-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载
-v /宿主机路径:容器内路径 #指定路径挂载 docker volume ls 是查看不到的
拓展:
# 通过 -v 容器内路径: ro rw 改变读写权限
ro # readonly 只读
rw # readwrite 可读可写
docker run -d -P --name nginx05 -v juming:/etc/nginx:ro nginx
docker run -d -P --name nginx05 -v juming:/etc/nginx:rw nginx
# ro 只要看到ro就说明这个路径只能通过宿主机来操作,容器内部是无法操作!
初始Dockerfile
Dockerfile 就是用来构建docker镜像的构建文件!命令脚本!先体验一下!
通过这个脚本可以生成镜像,镜像是一层一层的,基本就是一个个命令,每个命令都是一层
# 创建一个dockerfile文件,名字可以随便 建议Dockerfile
# 文件中的内容 指令(大写) 参数
FROM centos
VOLUME ["volume01","volume02"]
CMD echo "-----end------"
CMD /bin/bash
# 这里的每个命令,就是镜像的一层
docker build -f dockerfile -t achang/centos .
启动自己写的镜像
右下角的两个目录就是我们生产镜像的时候自动挂载的,数据卷目录
这个卷和外部一定有一个同步的目录
查看一下卷挂载
docker inspect 容器id
测试一下刚才的文件是否同步出去了!
这种方式使用的十分多,因为我们通常会构建自己的镜像!
假设构建镜像时候没有挂载卷,要手动镜像挂载 -v 卷名:容器内路径!
数据卷容器
多个MySQL同步数据!
命名的容器挂载数据卷!
--volumes-from list Mount volumes from the specified container(s)
# 测试,我们通过刚才启动的
# 测试:可以删除docker01,查看一下docker02和docker03是否可以访问这个文件
# 测试依旧可以访问
多个mysql实现数据共享
--volumes-from # 来指定要挂载哪个容器
➜ ~ docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=00000 --name mysql01 mysql:5.7
➜ ~ docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=00000 --name mysql02 --volumes-from mysql01 mysql:5.7
# 这个时候,可以实现两个容器数据同步!
结论:
容器之间的配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止。
但是一旦你持久化到了本地,这个时候,本地的数据是不会删除的!
DockerFile
DockerFile介绍
dockerfile
是用来构建docker镜像的文件!命令参数脚本!
构建步骤:
1、 编写一个dockerfile文件
2、 docker build 构建称为一个镜像
3、 docker run运行镜像
4、 docker push发布镜像(DockerHub 、阿里云仓库)
查看官方是怎么做的?
很多官方镜像都是基础包,很多功能没有,我们通常会自己搭建自己的镜像
官方既然可以制作镜像,那我们也可以!
DockerFile构建过程
基础知识:
1、每个保留关键字(指令)都是必须是大写字母
2、执行从上到下顺序
3、#表示注释
4、每一个指令都会创建提交一个新的镜像层,并提交!
Dockerfile是面向开发的,我们以后要发布项目,做镜像,就需要编写dockerfile文件,这个文件十分简单!
Docker镜像逐渐成企业交付的标准,必须要掌握!
DockerFile:构建文件,定义了一切的步骤,源代码
DockerImages:通过DockerFile构建生成的镜像,最终发布和运行产品。
Docker容器:容器就是镜像运行起来提供服务。
DockerFile的指令
FROM # 基础镜像,一切从这里开始构建
MAINTAINER # 镜像是谁写的, 姓名+邮箱
RUN # 镜像构建的时候需要运行的命令
ADD # 步骤,tomcat镜像,这个tomcat压缩包!添加内容 添加同目录
WORKDIR # 镜像的工作目录
VOLUME # 挂载的目录
EXPOSE # 保留端口配置
CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代。
ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD # 当构建一个被继承 DockerFile 这个时候就会运行ONBUILD的指令,触发指令。
COPY # 类似ADD,将我们文件拷贝到镜像中
ENV # 构建的时候设置环境变量!
实战测试
官方centos写的DockerFile:
Docker Hub中99%的镜像都是从这个基本镜像过来的FROM scratch
,然后配置需要的软件和配置来进行构建的
创建一个自己的centos
1、编写DockerFile文件
# 1、编写DockerFile文件
FROM centos
MAINTAINER achang<[email protected]>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 5299
CMD echo $MYPATH
CMD echo "---END---"
CMD /bin/bash
2、通过文件构建执行镜像
# 2、通过文件构建执行镜像
# -t -target 目标名(自定义)
# -f -file 指定哪个dockerfile文件
# 命令 docker build -f 文件路径 -t 镜像名:[tag] .
[root@izbp1h9ynqgizuhp85e2xkz dockerfile]# docker build -f myDockerFile-centos -t mycentos:0.1 .
Sending build context to Docker daemon 2.048kB
Step 1/10 : FROM centos
---> 300e315adb2f
Step 2/10 : MAINTAINER achang<[email protected]>
---> Using cache
---> 82edb0ac69c2
Step 3/10 : ENV MYPATH /usr/local
---> Using cache
---> e2325f72ff50
Step 4/10 : WORKDIR $MYPATH
---> Using cache
---> c3c6e1f65466
Step 5/10 : RUN yum -y install vim
---> Using cache
---> f3c0242d3727
Step 6/10 : RUN yum -y install net-tools
---> Running in 1d695361c61b
Last metadata expiration check: 0:04:02 ago on Sat Jan 30 11:45:24 2021.
Dependencies resolved.
================================================================================
Package Architecture Version Repository Size
================================================================================
Installing:
net-tools x86_64 2.0-0.52.20160912git.el8 baseos 322 k
Transaction Summary
================================================================================
Install 1 Package
Total download size: 322 k
Installed size: 942 k
Downloading Packages:
net-tools-2.0-0.52.20160912git.el8.x86_64.rpm 1.5 MB/s | 322 kB 00:00
--------------------------------------------------------------------------------
Total 444 kB/s | 322 kB 00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : net-tools-2.0-0.52.20160912git.el8.x86_64 1/1
Running scriptlet: net-tools-2.0-0.52.20160912git.el8.x86_64 1/1
Verifying : net-tools-2.0-0.52.20160912git.el8.x86_64 1/1
Installed:
net-tools-2.0-0.52.20160912git.el8.x86_64
Complete!
Removing intermediate container 1d695361c61b
---> 55b1ed9cadea
Step 7/10 : EXPOSE 5299
---> Running in b0dcf59f3190
Removing intermediate container b0dcf59f3190
---> d8c0d393ea76
Step 8/10 : CMD echo $MYPATH
---> Running in 208ebfa2d3ba
Removing intermediate container 208ebfa2d3ba
---> 57ac789f1e5b
Step 9/10 : CMD echo "---END---"
---> Running in f173e33f2b6c
Removing intermediate container f173e33f2b6c
---> 13b13c7594ba
Step 10/10 : CMD /bin/bash
---> Running in 85751b8ad3f4
Removing intermediate container 85751b8ad3f4
---> 0513d130fa1b
Successfully built 0513d130fa1b
Successfully tagged mycentos:0.1
测试运行
已经有vim
指令
有了ifconfig
命令
列出本地进行的变更历史
docker history 镜像ID
CMD 和 ENTRYPOINT区别
CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代。
ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令
测试cmd
# 编写dockerfile文件
$ vim dockerfile-test-cmd
# dockerfile内容
FROM centos
CMD ["ls","-a"]
# 构建镜像
$ docker build -f dockerfile-test-cmd -t cmd-test:0.1 .
# 运行镜像
$ docker run cmd-test:0.1
.
..
.dockerenv
bin
dev
# 想追加一个命令 -l 成为ls -al
[root@izbp1h9ynqgizuhp85e2xkz dockerfile]# docker run cmd-test -l
docker: Error response from daemon: OCI runtime create failed: container_linux.go:370: starting container process caused: exec: "-l": executable file not found in $PATH: unknown.
# cmd的情况下 -l 替换了CMD成为了CMD["ls","-l"]。 -l -->不是命令所以报错
# 需要写以下,通过ls -al 完整的命令 替换上面的 ls -a
# [root@izbp1h9ynqgizuhp85e2xkz dockerfile]# docker run cmd-test ls -al
发现CMD
命令是替换之前的命令,所以就需要写原生命令
测试ENTRYPOINT
# 编写dockerfile文件
$ vim dockerfile-test-entrypoint
FROM centos
ENTRYPOINT ["ls","-a"]
[root@izbp1h9ynqgizuhp85e2xkz dockerfile]# docker run 2c09d7cc807f
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
# 我们的命令,是直接拼接在 ENTRYPOINT 命令后面的
[root@izbp1h9ynqgizuhp85e2xkz dockerfile]# docker run 2c09d7cc807f -l
total 56
drwxr-xr-x 1 root root 4096 Jan 30 12:41 .
drwxr-xr-x 1 root root 4096 Jan 30 12:41 ..
-rwxr-xr-x 1 root root 0 Jan 30 12:41 .dockerenv
lrwxrwxrwx 1 root root 7 Nov 3 15:22 bin -> usr/bin
drwxr-xr-x 5 root root 340 Jan 30 12:41 dev
drwxr-xr-x 1 root root 4096 Jan 30 12:41 etc
drwxr-xr-x 2 root root 4096 Nov 3 15:22 home
lrwxrwxrwx 1 root root 7 Nov 3 15:22 lib -> usr/lib
lrwxrwxrwx 1 root root 9 Nov 3 15:22 lib64 -> usr/lib64
drwx------ 2 root root 4096 Dec 4 17:37 lost+found
drwxr-xr-x 2 root root 4096 Nov 3 15:22 media
drwxr-xr-x 2 root root 4096 Nov 3 15:22 mnt
drwxr-xr-x 2 root root 4096 Nov 3 15:22 opt
dr-xr-xr-x 123 root root 0 Jan 30 12:41 proc
dr-xr-x--- 2 root root 4096 Dec 4 17:37 root
drwxr-xr-x 11 root root 4096 Dec 4 17:37 run
lrwxrwxrwx 1 root root 8 Nov 3 15:22 sbin -> usr/sbin
drwxr-xr-x 2 root root 4096 Nov 3 15:22 srv
dr-xr-xr-x 13 root root 0 Jan 30 12:41 sys
drwxrwxrwt 7 root root 4096 Dec 4 17:37 tmp
drwxr-xr-x 12 root root 4096 Dec 4 17:37 usr
drwxr-xr-x 20 root root 4096 Dec 4 17:37 var
发现了ENTRYPOINT
命令可以在命令后面叠加
实战:Tomcat镜像
1、准备镜像文件
准备tomcat 和 jdk到当前目录,编写好README
2、编写dokerfile,官方命名Dockerfile
,build
时会自动寻找这个文件,就不需要-f
指定了
FROM centos
MAINTAINER achang<[email protected]>
COPY readme.txt /usr/local/readme.txt
ADD jdk-8u161-linux-x64.tar.gz /usr/local
ADD apache-tomcat-9.0.41.tar.gz /usr/local
RUN yum -y install vim
ENV MYPATH /usr/local
ENV JAVA_HOME /usr/local/jdk1.8.0.161
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.41
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.41
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
WORKDIR $MYPATH
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.41/bin/startup.sh && tail -F /usr/localapache-tomcat-9.0.41/bin/logs/catalina.out
3、构建镜像,通过build
命令构建,不要忘记 .
# docker build -t dirtomcat .
[root@izbp1h9ynqgizuhp85e2xkz test]# docker build -t dirtomcat .
Sending build context to Docker daemon 201.2MB
Step 1/15 : FROM centos
---> 300e315adb2f
Step 2/15 : MAINTAINER achang<[email protected]>
---> Using cache
---> 82edb0ac69c2
Step 3/15 : COPY readme.txt /usr/local/readme.txt
---> 6139a88f8d11
Step 4/15 : ADD jdk-8u161-linux-x64.tar.gz /usr/local
---> 9de12dfdd661
Step 5/15 : ADD apache-tomcat-9.0.41.tar.gz /usr/local
---> 1686e6a55ab1
Step 6/15 : RUN yum -y install vim
---> Running in 61ebe2e2edec
CentOS Linux 8 - AppStream 1.3 MB/s | 6.3 MB 00:04
CentOS Linux 8 - BaseOS 507 kB/s | 2.3 MB 00:04
CentOS Linux 8 - Extras 15 kB/s | 8.6 kB 00:00
Last metadata expiration check: 0:00:01 ago on Sun Jan 31 03:56:13 2021.
Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
vim-enhanced x86_64 2:8.0.1763-15.el8 appstream 1.4 M
Installing dependencies:
gpm-libs x86_64 1.20.7-15.el8 appstream 39 k
vim-common x86_64 2:8.0.1763-15.el8 appstream 6.3 M
vim-filesystem noarch 2:8.0.1763-15.el8 appstream 48 k
which x86_64 2.21-12.el8 baseos 49 k
Transaction Summary
================================================================================
Install 5 Packages
Total download size: 7.8 M
Installed size: 30 M
Downloading Packages:
(1/5): gpm-libs-1.20.7-15.el8.x86_64.rpm 294 kB/s | 39 kB 00:00
(2/5): vim-filesystem-8.0.1763-15.el8.noarch.rp 1.3 MB/s | 48 kB 00:00
(3/5): vim-enhanced-8.0.1763-15.el8.x86_64.rpm 3.7 MB/s | 1.4 MB 00:00
(4/5): vim-common-8.0.1763-15.el8.x86_64.rpm 12 MB/s | 6.3 MB 00:00
(5/5): which-2.21-12.el8.x86_64.rpm 100 kB/s | 49 kB 00:00
--------------------------------------------------------------------------------
Total 4.7 MB/s | 7.8 MB 00:01
warning: /var/cache/dnf/appstream-02e86d1c976ab532/packages/gpm-libs-1.20.7-15.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
CentOS Linux 8 - AppStream 1.3 MB/s | 1.6 kB 00:00
Importing GPG key 0x8483C65D:
Userid : "CentOS (CentOS Official Signing Key) <[email protected]>"
Fingerprint: 99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
Key imported successfully
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : which-2.21-12.el8.x86_64 1/5
Installing : vim-filesystem-2:8.0.1763-15.el8.noarch 2/5
Installing : vim-common-2:8.0.1763-15.el8.x86_64 3/5
Installing : gpm-libs-1.20.7-15.el8.x86_64 4/5
Running scriptlet: gpm-libs-1.20.7-15.el8.x86_64 4/5
Installing : vim-enhanced-2:8.0.1763-15.el8.x86_64 5/5
Running scriptlet: vim-enhanced-2:8.0.1763-15.el8.x86_64 5/5
Running scriptlet: vim-common-2:8.0.1763-15.el8.x86_64 5/5
Verifying : gpm-libs-1.20.7-15.el8.x86_64 1/5
Verifying : vim-common-2:8.0.1763-15.el8.x86_64 2/5
Verifying : vim-enhanced-2:8.0.1763-15.el8.x86_64 3/5
Verifying : vim-filesystem-2:8.0.1763-15.el8.noarch 4/5
Verifying : which-2.21-12.el8.x86_64 5/5
Installed:
gpm-libs-1.20.7-15.el8.x86_64 vim-common-2:8.0.1763-15.el8.x86_64
vim-enhanced-2:8.0.1763-15.el8.x86_64 vim-filesystem-2:8.0.1763-15.el8.noarch
which-2.21-12.el8.x86_64
Complete!
Removing intermediate container 61ebe2e2edec
---> 72d40532bcc0
Step 7/15 : ENV MYPATH /usr/local
---> Running in 64953e87fb82
Removing intermediate container 64953e87fb82
---> 157e51dd50d8
Step 8/15 : ENV JAVA_HOME /usr/local/jdk1.8.0.161
---> Running in 28e653e0397f
Removing intermediate container 28e653e0397f
---> 6bed45cea259
Step 9/15 : ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
---> Running in 714dfa4e0f32
Removing intermediate container 714dfa4e0f32
---> 00438e7f51e3
Step 10/15 : ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.41
---> Running in f38eb17a0979
Removing intermediate container f38eb17a0979
---> 633b86a072f4
Step 11/15 : ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.41
---> Running in d26c47994ef8
Removing intermediate container d26c47994ef8
---> b7903f70d65c
Step 12/15 : ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
---> Running in 2afe4f349677
Removing intermediate container 2afe4f349677
---> aedaee0f98df
Step 13/15 : WORKDIR $MYPATH
---> Running in 0a013008277c
Removing intermediate container 0a013008277c
---> 9760898da7dd
Step 14/15 : EXPOSE 8080
---> Running in d69219c8493e
Removing intermediate container d69219c8493e
---> 46190e253c19
Step 15/15 : CMD /usr/local/apache-tomcat-9.0.41/bin/startup.sh && tail -F /usr/localapache-tomcat-9.0.41/bin/logs/catalina.out
---> Running in 3f0b6ea8f2ed
Removing intermediate container 3f0b6ea8f2ed
---> 08532a1cace3
Successfully built 08532a1cace3
Successfully tagged dirtomcat:latest
4、run镜像
[root@izbp1h9ynqgizuhp85e2xkz test]# docker run -d -p 5333:8080 --name achangtomcat -v /home/test/tomcat/test:/usr/local/apache-tomcat-9.0.41/webapps/test -v /home/test/build/tomcat/logs/:/usr/local/apache-tomcat-9.0.41/logs diytomcat
5、访问测试
6、发布项目(由于做了卷挂载,我们直接在本地编写项目就可以发布了!)
web.xml:↓
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>db</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
index.jsp:↓
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>hello,achang</title>
</head>
<body>
Hello World!<br/>
<%
System.out.println("-----test-----");
%>
</body>
</html>
发现:项目部署成功,可以直接访问!
我们以后开发的步骤:需要掌握Dockerfile的编写!我们之后的一切都是使用docker镜像来发布运行!
发布自己的镜像
Dockerhub
1、地址 https://hub.docker.com/
2、确定这个账号可以登录
3、登录
# docker login --help
Usage: docker login [OPTIONS] [SERVER]
Log in to a Docker registry.
If no server is specified, the default is defined by the daemon.
Options:
-p, --password string Password
--password-stdin Take the password from stdin
-u, --username string Username
4、提交 push镜像
[root@izbp1h9ynqgizuhp85e2xkz logs]# docker push diytomcat
Using default tag: latest
The push refers to repository [docker.io/library/diytomcat]
8c521d4e223e: Preparing
150761504cc4: Preparing
303269e3e2c1: Preparing
f26a70e72c57: Preparing
2653d992f4ef: Preparing
denied: requested access to the resource is denied #push失败,被拒绝
会发现push不上去,因为如果没有前缀的话默认是push到 官方的library
# 解决方法
前提保证 docker login -u XXXX账号 -p XXX密码 # 登录过
# docker tag 容器名 docker库你自己的id/自定义名
docker tag diytomcat achang3306/diytomcat
# 再 push
docker push achang3306/diytomcat
阿里云镜像服务上
进入阿里云容器镜像服务
1、登录阿里云
2、找到容器镜像服务
3、创建名称容器(一个大容器,下面放很多的镜像)
4、创建容器镜像
5、浏览阿里云
注意:要根据阿里云要求的格式书写指令
看官网 很详细 https://cr.console.aliyun.com/repository/
$ sudo docker login --username=[email protected] registry.cn-hangzhou.aliyuncs.com
$ sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/achang/achang-test:[镜像版本号]
$ sudo docker push registry.cn-hangzhou.aliyuncs.com/achang/achang-test:[镜像版本号]
示例:
# 登录获得权限
[root@izbp1h9ynqgizuhp85e2xkz logs]# docker login [email protected] registry.cn-hangzhou.aliyuncs.com
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
[root@izbp1h9ynqgizuhp85e2xkz logs]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
diytomcat latest 27fce10d773a 3 hours ago 668MB
achang/tomcat 1.0 27fce10d773a 3 hours ago 668MB
achang1010/diytomcat latest 27fce10d773a 3 hours ago 668MB
achang123/diytomcat 0.1 27fce10d773a 3 hours ago 668MB
achang168/diytomcat latest 27fce10d773a 3 hours ago 668MB
achang3306/diytomcat latest 27fce10d773a 3 hours ago 668MB
achang555/tomcat 0.1 27fce10d773a 3 hours ago 668MB
entrypoint-test latest 2c09d7cc807f 26 hours ago 209MB
cmd-test latest 8e57c56caa7e 27 hours ago 209MB
mycentos 0.1 0513d130fa1b 27 hours ago 282MB
achang/centos latest d4fdaffa138e 2 days ago 209MB
tomcat02 1.0 116c7aa5521d 2 days ago 654MB
mysql 5.7 a70d36bc331a 12 days ago 449MB
redis latest 621ceef7494a 2 weeks ago 104MB
tomcat 9.0 040bdb29ab37 2 weeks ago 649MB
tomcat latest 040bdb29ab37 2 weeks ago 649MB
nginx latest f6d0b4767a6c 2 weeks ago 133MB
centos latest 300e315adb2f 7 weeks ago 209MB
portainer/portainer latest 62771b0b9b09 6 months ago 79.1MB
elasticsearch 7.6.2 f29a1ee41030 10 months ago 791MB
hello-world latest bf756fb1ae65 13 months ago 13.3kB
# 将要上传阿里云的资源改名
[root@izbp1h9ynqgizuhp85e2xkz logs]# docker tag 27fce10d773a registry.cn-hangzhou.aliyuncs.com/achang/achang-test:0.1
[root@izbp1h9ynqgizuhp85e2xkz logs]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
diytomcat latest 27fce10d773a 3 hours ago 668MB
registry.cn-hangzhou.aliyuncs.com/achang/achang-test 0.1 27fce10d773a 3 hours ago 668MB
achang/tomcat 1.0 27fce10d773a 3 hours ago 668MB
achang1010/diytomcat latest 27fce10d773a 3 hours ago 668MB
achang123/diytomcat 0.1 27fce10d773a 3 hours ago 668MB
achang168/diytomcat latest 27fce10d773a 3 hours ago 668MB
achang3306/diytomcat latest 27fce10d773a 3 hours ago 668MB
achang555/tomcat 0.1 27fce10d773a 3 hours ago 668MB
entrypoint-test latest 2c09d7cc807f 26 hours ago 209MB
cmd-test latest 8e57c56caa7e 27 hours ago 209MB
mycentos 0.1 0513d130fa1b 27 hours ago 282MB
achang/centos latest d4fdaffa138e 2 days ago 209MB
tomcat02 1.0 116c7aa5521d 2 days ago 654MB
mysql 5.7 a70d36bc331a 12 days ago 449MB
redis latest 621ceef7494a 2 weeks ago 104MB
tomcat 9.0 040bdb29ab37 2 weeks ago 649MB
tomcat latest 040bdb29ab37 2 weeks ago 649MB
nginx latest f6d0b4767a6c 2 weeks ago 133MB
centos latest 300e315adb2f 7 weeks ago 209MB
portainer/portainer latest 62771b0b9b09 6 months ago 79.1MB
elasticsearch 7.6.2 f29a1ee41030 10 months ago 791MB
hello-world latest bf756fb1ae65 13 months ago 13.3kB
# 上传push想要的镜像
[root@izbp1h9ynqgizuhp85e2xkz logs]# docker push registry.cn-hangzhou.aliyuncs.com/achang/achang-test:0.1
The push refers to repository [registry.cn-hangzhou.aliyuncs.com/achang/achang-test]
8c521d4e223e: Pushed
150761504cc4: Pushed
303269e3e2c1: Pushed
f26a70e72c57: Pushed
2653d992f4ef: Pushed
0.1: digest: sha256:2194133a2e9eed0f20a085ffbfe0e2d1af4015adc9120b4d38dc992f8d1a914e size: 1373