Docker笔记二
笔记一:https://blog.youkuaiyun.com/qq_41059755/article/details/118807910
学习视频看的是up主:遇见狂神说
一、commit镜像
类似于git commit
docker commit -m "提交的描述信息" -a "作者" 容器名 镜像名:[TAG]
比如之前部署的Tomcat,我们在原有镜像上进行了修改,添加了webapps,那么就可以commit试试看:
[root@centos ~]# docker commit -m "[ADD] webapps" -a "root" tomcat_test tomcat_new
sha256:663b511563daaeaa2faef9cc689a12ae3f44fb24fd7e40344401ef55d0203687
[root@centos ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat_new latest 663b511563da 7 seconds ago 672MB
nginx latest 4cdc5dd7eaad 9 days ago 133MB
tomcat latest 36ef696ea43d 13 days ago 667MB
portainer/portainer latest 580c0e4e98b0 3 months ago 79.1MB
centos latest 300e315adb2f 7 months ago 209MB
kibana 7.6.2 f70986bc5191 15 months ago 1.01GB
elasticsearch 7.6.2 f29a1ee41030 15 months ago 791MB
发现tomcat_new比tomcat多了5MB的SIZE。
查看镜像的构建历史:docker history
commit镜像实现了从容器到镜像的构建,相当于保存了一个容器的快照。
二、容器数据卷
如果我们删除容器,那么容器中的数据也会消失,风险比较大。需求:数据可以持久化。
如果容器是MySQL,那么删除容器后,数据库中的表的数据也会消失,实现删库跑路!需求:MySQL数据可以存储在本地。
解决方案:把容器中的数据同步到本地。即容器数据卷技术!
容器数据卷还可以实现容器之间的数据共享。
2.1、docker -v
docker run -it -v 主机目录:容器内目录
譬如我要启动一个centos容器,本机的/test目录挂载到容器的/soft目录,可通过以下方式指定:
docker run -it -v /test:/soft centos /bin/bash
如果本机没有指定的目录,它会自动新建一个文件夹:
[root@centos ~]# docker run -it -v /test:/soft centos /bin/bash
[root@824558483e38 /]# [root@centos ~]# cd /
[root@centos /]# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys test tmp usr var
测试是否挂载成功:在容器/soft目录下新建一个文件test.txt,查看主机/test目录下是否也存在。
[root@824558483e38 /]# cd soft
[root@824558483e38 soft]# cd /
[root@824558483e38 /]# cd soft
[root@824558483e38 soft]# touch test.txt
[root@824558483e38 soft]# ls
test.txt
[root@824558483e38 soft]# read escape sequence
[root@centos /]# cd test
[root@centos test]# ls
test.txt
docker inspect 容器ID
可以查看挂载信息:
Source对应主机目录,Destination对应容器内目录。
进一步测试:exit容器,在主机目录下进行操作(删除text.txt,新建并编辑test.java),再重启容器
[root@824558483e38 soft]# ls
test.txt
[root@824558483e38 soft]# exit
exit
[root@centos test]# ls
test.txt
[root@centos test]# rm -f test.txt
[root@centos test]# vim test.java
[root@centos test]# ls
test.java
[root@centos test]# docker restart 824558483e38
824558483e38
[root@centos test]# docker attach 824558483e38
[root@824558483e38 /]# cd soft
[root@824558483e38 soft]# ls
test.java
[root@824558483e38 soft]# cat test.java
hello,linux
2.2、实战:MySQL同步表数据
docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
连接MySQL并新建一个数据库test:
查看主机的对应目录:
[root@centos ~]# cd /home/mysql/data
# 创建数据库test前
[root@centos data]# ls
auto.cnf ca.pem client-key.pem ibdata1 ib_logfile1 mysql private_key.pem server-cert.pem sys
ca-key.pem client-cert.pem ib_buffer_pool ib_logfile0 ibtmp1 performance_schema public_key.pem server-key.pem
# 创建数据库test后
[root@centos data]# ls
auto.cnf ca.pem client-key.pem ibdata1 ib_logfile1 mysql private_key.pem server-cert.pem sys
ca-key.pem client-cert.pem ib_buffer_pool ib_logfile0 ibtmp1 performance_schema public_key.pem server-key.pem test
干掉容器,查看本地的数据卷是否依然存在:
[root@centos data]# docker rm -f d7bc6b2f5409
d7bc6b2f5409
[root@centos data]# ls
auto.cnf ca.pem client-key.pem ibdata1 ib_logfile1 mysql private_key.pem server-cert.pem sys
ca-key.pem client-cert.pem ib_buffer_pool ib_logfile0 ibtmp1 performance_schema public_key.pem server-key.pem test
2.3、具名挂载和匿名挂载
docker volumn ls
查看卷
[root@centos data]# docker volume ls
DRIVER VOLUME NAME
local 5064d427b08d27876ece1f16d66da1c799d1b8d2c4dcc98288b9c881d4011687
目前有一个volumn,使用docker volume inspect 卷名
查看详细信息(其实这是之前启动portainer容器时docker自动创建的一个卷):
[root@centos data]# docker volume inspect 5064d427b08d27876ece1f16d66da1c799d1b8d2c4dcc98288b9c881d4011687
[
{
"CreatedAt": "2021-07-16T15:32:42+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/5064d427b08d27876ece1f16d66da1c799d1b8d2c4dcc98288b9c881d4011687/_data",
"Name": "5064d427b08d27876ece1f16d66da1c799d1b8d2c4dcc98288b9c881d4011687",
"Options": null,
"Scope": "local"
}
]
上面的卷名是一串乱码,说明这个卷创建时没有指定卷名,所以它是匿名挂载。
匿名挂载的例子
docker run -d -p 3344:80 -v /etc/nginx nginx
这里我们只指定了容器内目录,没有指定主机目录,此时docker会自动创建一个卷,然后进行挂载。
[root@centos data]# docker volume ls
DRIVER VOLUME NAME
local 42c101938b33f27a2374e54896366f604cf1c575668ad50e7669b15df754b0ff
local 5064d427b08d27876ece1f16d66da1c799d1b8d2c4dcc98288b9c881d4011687
[root@centos data]# docker volume inspect 42c101938b33f27a2374e54896366f604cf1c575668ad50e7669b15df754b0ff
[
{
"CreatedAt": "2021-07-20T14:01:17+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/42c101938b33f27a2374e54896366f604cf1c575668ad50e7669b15df754b0ff/_data",
"Name": "42c101938b33f27a2374e54896366f604cf1c575668ad50e7669b15df754b0ff",
"Options": null,
"Scope": "local"
}
]
我们进入卷的目录:(里边就是/etc/nginx的内容)
[root@centos data]# cd /var/lib/docker/volumes/42c101938b33f27a2374e54896366f604cf1c575668ad50e7669b15df754b0ff
[root@centos 42c101938b33f27a2374e54896366f604cf1c575668ad50e7669b15df754b0ff]# ls
_data
[root@centos 42c101938b33f27a2374e54896366f604cf1c575668ad50e7669b15df754b0ff]# cd _data/
[root@centos _data]# ls
conf.d fastcgi_params mime.types modules nginx.conf scgi_params uwsgi_params
指定路径挂载(不会创建卷)
之前的MySQL挂载有指定主机目录:
docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
执行命令后,我们查看卷,发现卷并没有增加:
[root@centos _data]# docker volume ls
DRIVER VOLUME NAME
local 42c101938b33f27a2374e54896366f604cf1c575668ad50e7669b15df754b0ff
local 5064d427b08d27876ece1f16d66da1c799d1b8d2c4dcc98288b9c881d4011687
这是因为我们已经指定了主机目录,docker就没有帮我们自动创建卷。
具名挂载的例子
# 创建一个卷
docker volume create nginx-vol
查看卷:(已经创建成功)
[root@centos _data]# docker volume ls
DRIVER VOLUME NAME
local 42c101938b33f27a2374e54896366f604cf1c575668ad50e7669b15df754b0ff
local 5064d427b08d27876ece1f16d66da1c799d1b8d2c4dcc98288b9c881d4011687
local nginx-vol
# 使用已经创建好的卷进行具名挂载
docker run -d -p 3344:80 -v nginx-vol:/etc/nginx nginx
查看卷内文件:
[root@centos _data]# docker volume inspect nginx-vol
[
{
"CreatedAt": "2021-07-20T14:27:44+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/nginx-vol/_data",
"Name": "nginx-vol",
"Options": {},
"Scope": "local"
}
]
[root@centos _data]# cd /var/lib/docker/volumes/nginx-vol/_data
[root@centos _data]# ls
conf.d fastcgi_params mime.types modules nginx.conf scgi_params uwsgi_params
具名挂载比较好,可以通过卷名就可以直观地知道它是挂载到哪个容器。不推荐使用匿名挂载。
2.4、权限控制
控制容器只读:(只能通过主机来操作)
docker run -d -p 3344:80 -v nginx-vol:/etc/nginx:ro nginx
可读可写:
docker run -d -p 3344:80 -v nginx-vol:/etc/nginx:rw nginx
2.5、初始DockerFile
**什么是DockerFile?**生成镜像的脚本。
镜像有许多layer,所以DockerFile中的命令就是一条命令对应一个层。
先写一个简单的DockerFile
vim dockerfile
# 以centos镜像为基础
FROM centos
# 卷
VOLUME ["volume01","volume02"]
CMD echo "----end----"
CMD /bin/bash
构建镜像(由于有四条命令,所以有四层)
docker build -f dockerfile -t test_centos .
[root@centos ~]# docker build -f dockerfile -t test_centos .
Sending build context to Docker daemon 62.46kB
Step 1/4 : FROM centos
---> 300e315adb2f
Step 2/4 : VOLUME ["volume01","volume02"]
---> Running in 5016145b1cac
Removing intermediate container 5016145b1cac
---> c1498ce88e3e
Step 3/4 : CMD echo "----end----"
---> Running in 82c2d61e9f65
Removing intermediate container 82c2d61e9f65
---> 8a621f7ee732
Step 4/4 : CMD /bin/bash
---> Running in 7d345479c151
Removing intermediate container 7d345479c151
---> 7ee3ca501c6e
Successfully built 7ee3ca501c6e
Successfully tagged test_centos:latest
查看镜像:
[root@centos ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test_centos latest 7ee3ca501c6e 4 minutes ago 209MB
运行:
[root@centos ~]# docker run -it test_centos
docker: Error response from daemon: OCI runtime create failed: invalid mount {Destination:volume02 Type:bind Source:/var/lib/docker/volumes/b56741b559a7b6d3392461b574a276c9d7adba32c2b3bf9c280ddbec5bfc3cb0/_data Options:[rbind]}: mount destination volume02 not absolute: unknown.
不知道为啥报错了,明明和狂神的操作是一样的。
根据描述mount destination volume02 not absolute应该是因为volume02前没有加/
VOLUME ["/volume01","/volume02"]
改完之后再build再运行就成功了。docker inspect查看容器信息:
"Mounts": [
{
"Type": "volume",
"Name": "4fa74212309511f2e8845b6ae83882c59d28bbd230d672846585dbca15c8fc4d",
"Source": "/var/lib/docker/volumes/4fa74212309511f2e8845b6ae83882c59d28bbd230d672846585dbca15c8fc4d/_data",
"Destination": "/volume01",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
},
{
"Type": "volume",
"Name": "447cbc79c23ac1304040ea0cd16db5a5faf993072cc09306f8eec8ec0e3061e5",
"Source": "/var/lib/docker/volumes/447cbc79c23ac1304040ea0cd16db5a5faf993072cc09306f8eec8ec0e3061e5/_data",
"Destination": "/volume02",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
我们可以发现这是匿名挂载,VOLUME ["/volume01","/volume02"]指定的是容器内的目录,容器内的目录必须是绝对路径,所以之前报错。
2.6、多个容器同步数据卷
–volumes-from
先用之前创建的centos镜像创建2个容器:
docker run -it --name centos01 test_centos
docker run -it --name centos02 --volumes-from centos01 test_centos
测试centos01新建一个文件,查看centos02是否同步:
[root@centos ~]# docker attach centos01
[root@70bb63b233a1 volume01]# ls
[root@70bb63b233a1 volume01]# touch centos01.txt
[root@70bb63b233a1 volume01]# ls
centos01.txt
[root@70bb63b233a1 volume01]# read escape sequence
[root@centos ~]# docker attach centos02
[root@6066c14eb592 volume01]# ls
centos01.txt
再创建centos03,查看它的volume01下有没有对应文件:
[root@centos ~]# docker run -it --name centos03 --volumes-from centos02 test_centos
[root@410ebe6fe805 /]# cd volume01
[root@410ebe6fe805 volume01]# ls
centos01.txt
三、DockerFile
DockerFile构建镜像:
1、编写一个dockerfile文件
2、docker build 构建成为一个镜像
3、docker run 运行镜像
4、docker push 发布镜像(到DockerHub或者阿里云镜像仓库)
3.1、DockerFile指令介绍

3.2、实战:构建自己的centos
官方的centos镜像是阉割版,许多命令都不支持。比如vim、ifconfig
FROM centos
MAINTAINER chenhaijie<haijiechen@hand-china.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "----end----"
CMD /bin/bash
docker build -f dockerfile -t my_centos .
# 运行,测试ifconfig是否可以使用(vim也可以用了,这里不展示)
[root@centos mycentos]# docker run -it my_centos
[root@6727103ee6bf local]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.4 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:ac:11:00:04 txqueuelen 0 (Ethernet)
RX packets 7 bytes 586 (586.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
# 查看默认目录
[root@6727103ee6bf local]# pwd
/usr/local
3.3、CMD和ENTRYPOINT的区别
CMD的例子
FROM centos
CMD ["ls","-a"]
build之后运行:(执行了ls -a的命令)
[root@centos mycentos]# docker run -it my_centos
. .dockerenv dev home lib64 media opt root sbin sys usr
.. bin etc lib lost+found mnt proc run srv tmp var
追加-l再运行:(报错,这是因为它无法实现追加命令,其实是把-l替换了之前的ls -a命令,而-l不是一个可执行命令)
[root@centos ~]# docker run -it my_centos -l
docker: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "-l": executable file not found in $PATH: unknown.
所以不能追加,我们直接ls -a -l替换:
[root@centos ~]# docker run -it my_centos ls -a -l
total 16
drwxr-xr-x 17 root root 4096 Jul 21 05:56 .
drwxr-xr-x 17 root root 4096 Jul 21 05:56 ..
-rwxr-xr-x 1 root root 0 Jul 21 05:56 .dockerenv
lrwxrwxrwx 1 root root 7 Nov 3 2020 bin -> usr/bin
drwxr-xr-x 5 root root 360 Jul 21 05:56 dev
drwxr-xr-x 52 root root 4096 Jul 21 05:56 etc
drwxr-xr-x 2 root root 6 Nov 3 2020 home
lrwxrwxrwx 1 root root 7 Nov 3 2020 lib -> usr/lib
lrwxrwxrwx 1 root root 9 Nov 3 2020 lib64 -> usr/lib64
drwx------ 2 root root 6 Dec 4 2020 lost+found
drwxr-xr-x 2 root root 6 Nov 3 2020 media
drwxr-xr-x 2 root root 6 Nov 3 2020 mnt
drwxr-xr-x 2 root root 6 Nov 3 2020 opt
dr-xr-xr-x 250 root root 0 Jul 21 05:56 proc
dr-xr-x--- 2 root root 154 Dec 4 2020 root
drwxr-xr-x 11 root root 152 Dec 4 2020 run
lrwxrwxrwx 1 root root 8 Nov 3 2020 sbin -> usr/sbin
drwxr-xr-x 2 root root 6 Nov 3 2020 srv
dr-xr-xr-x 13 root root 0 Jul 21 05:56 sys
drwxrwxrwt 7 root root 138 Dec 4 2020 tmp
drwxr-xr-x 12 root root 133 Dec 4 2020 usr
drwxr-xr-x 20 root root 4096 Dec 4 2020 var
ENTRYPOINT的例子
FROM centos
ENTRYPOINT ["ls","-a"]
build之后运行:
[root@centos mycentos]# docker run -it my_centos
. .dockerenv dev home lib64 media opt root sbin sys usr
.. bin etc lib lost+found mnt proc run srv tmp var
[root@centos mycentos]# docker run -it my_centos -l
total 16
drwxr-xr-x 17 root root 4096 Jul 21 06:00 .
drwxr-xr-x 17 root root 4096 Jul 21 06:00 ..
-rwxr-xr-x 1 root root 0 Jul 21 06:00 .dockerenv
lrwxrwxrwx 1 root root 7 Nov 3 2020 bin -> usr/bin
drwxr-xr-x 5 root root 360 Jul 21 06:00 dev
drwxr-xr-x 52 root root 4096 Jul 21 06:00 etc
drwxr-xr-x 2 root root 6 Nov 3 2020 home
lrwxrwxrwx 1 root root 7 Nov 3 2020 lib -> usr/lib
lrwxrwxrwx 1 root root 9 Nov 3 2020 lib64 -> usr/lib64
drwx------ 2 root root 6 Dec 4 2020 lost+found
drwxr-xr-x 2 root root 6 Nov 3 2020 media
drwxr-xr-x 2 root root 6 Nov 3 2020 mnt
drwxr-xr-x 2 root root 6 Nov 3 2020 opt
dr-xr-xr-x 249 root root 0 Jul 21 06:00 proc
dr-xr-x--- 2 root root 154 Dec 4 2020 root
drwxr-xr-x 11 root root 152 Dec 4 2020 run
lrwxrwxrwx 1 root root 8 Nov 3 2020 sbin -> usr/sbin
drwxr-xr-x 2 root root 6 Nov 3 2020 srv
dr-xr-xr-x 13 root root 0 Jul 21 05:56 sys
drwxrwxrwt 7 root root 138 Dec 4 2020 tmp
drwxr-xr-x 12 root root 133 Dec 4 2020 usr
drwxr-xr-x 20 root root 4096 Dec 4 2020 var
# 这个相当于执行ls -a ls -a -l
[root@centos mycentos]# docker run -it my_centos ls -a -l
ls: cannot access 'ls': No such file or directory
总结:ENTRYPOINT就是只能追加不能替换,CMD只能替换不能追加
3.4、实战:centos部署tomcat构建镜像
首先下载tomcat9和jdk8的压缩包:(直接百度搜tomcat9和jdk8,第一个链接进去找tar.gz压缩包)
[root@centos mytomcat]# ls
apache-tomcat-9.0.50.tar.gz jdk-8u301-linux-x64.tar.gz
建一个readme.txt,之后拷贝到镜像:
[root@centos mytomcat]# touch readme.txt
[root@centos mytomcat]# ls
apache-tomcat-9.0.50.tar.gz jdk-8u301-linux-x64.tar.gz readme.txt
FROM centos
MAINTAINER chenhaijie<haijiechen@hand-china.com>
COPY readme.txt /usr/local/readme.txt
# ADD命令会自动解压
ADD jdk-8u301-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.50.tar.gz /usr/local/
RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_301
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.50
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.50
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.50/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.50/bin/logs/catalina.out
build:
docker build -f dockerfile -t centos_tomcat .
run:
docker run -d -p 9090:8080 --name centos_tomcat -v /root/mytomcat/test:/usr/local/apache-tomcat-9.0.50/webapps/test -v /root/mytomcat/tomcatlogs:/usr/local/apache-tomcat-9.0.50/logs centos_tomcat
查看目录,已经自动建好了test和tomcatlogs文件夹:
[root@centos mytomcat]# ls
apache-tomcat-9.0.50.tar.gz dockerfile jdk-8u301-linux-x64.tar.gz readme.txt test tomcatlogs
进入容器:(发现readme.txt复制成功,jdk8和tomcat9已经解压)
[root@centos mytomcat]# docker exec -it centos_tomcat /bin/bash
[root@624e4655abaf local]# ls
apache-tomcat-9.0.50 etc include lib libexec readme.txt share
bin games jdk1.8.0_301 lib64 local sbin src
访问9090端口:
回到主机,在test目录下进行一些操作:(到这发现自己应该去学一下tomcat)
[root@centos mytomcat]# cd test
[root@centos test]# mkdir WEB-INF
[root@centos test]# cd WEB-INF
[root@centos WEB-INF]# ls
[root@centos WEB-INF]# vim web.xml
[root@centos WEB-INF]# cd ..
[root@centos test]# vim index.jsp
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
</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>第一个JSP程序</title>
</head>
<body>
Hello World!<br/>
<%
out.println("Hello Docker!");
%>
</body>
</html>
在主机test目录下的操作会同步到tomcat相应目录,因为之前运行时做了挂载。
访问:
查看日志:
[root@centos mytomcat]# cd tomcatlogs/
[root@centos tomcatlogs]# ls
catalina.2021-07-21.log host-manager.2021-07-21.log localhost_access_log.2021-07-21.txt
catalina.out localhost.2021-07-21.log manager.2021-07-21.log
[root@centos tomcatlogs]# cat catalina.out
21-Jul-2021 08:08:52.016 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name: Apache Tomcat/9.0.50
21-Jul-2021 08:08:52.019 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: Jun 28 2021 08:46:44 UTC
21-Jul-2021 08:08:52.019 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version number: 9.0.50.0
21-Jul-2021 08:08:52.019 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name: Linux
21-Jul-2021 08:08:52.019 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version: 3.10.0-1160.31.1.el7.x86_64
21-Jul-2021 08:08:52.019 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture: amd64
21-Jul-2021 08:08:52.019 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home: /usr/local/jdk1.8.0_301/jre
21-Jul-2021 08:08:52.019 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version: 1.8.0_301-b09
3.5、发布镜像
DockerHub发布镜像
注册账号:https://hub.docker.com/
登录:
[root@centos ~]# docker login -u xiaojie1423
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@centos ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos_tomcat latest 9c1684bebca3 2 hours ago 651MB
my_centos latest 544f97e0e1b6 2 hours ago 209MB
test_centos latest 7b9c26b631e4 24 hours ago 209MB
mysql 5.7 9f1d21c1025a 35 hours ago 448MB
tomcat_new latest 663b511563da 4 days ago 672MB
发布my_centos到Docker Hub:
docker push my_centos
[root@centos ~]# docker push my_centos
Using default tag: latest
The push refers to repository [docker.io/library/my_centos]
2653d992f4ef: Preparing
denied: requested access to the resource is denied
解决方案,重命名镜像(镜像前加上你的账号):
[root@centos ~]# docker tag my_centos xiaojie1423/my_centos:1.0
[root@centos ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos_tomcat latest 9c1684bebca3 2 hours ago 651MB
my_centos latest 544f97e0e1b6 3 hours ago 209MB
xiaojie1423/my_centos 1.0 544f97e0e1b6 3 hours ago 209MB
[root@centos ~]# docker push xiaojie1423/my_centos:1.0
# 有一点点慢,需要等一会儿,可以再开一个终端学习下一个东西
去官网搜索镜像,发布成功:
发布镜像到阿里云镜像仓库
登录阿里云:https://cr.console.aliyun.com/
创建个人版实例:(操作省略,很简单)
在建仓库之前,先去建一个命名空间。
然后按照提示创建仓库,这一步选择本地仓库就行:
创建成功后,这里有操作指南,可以参考它进行发布镜像:
# 这次发布600多M的centos_tomcat,看看阿里云速度怎么样
[root@centos ~]# docker login --username=xiaojie1423 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@centos ~]# docker tag centos_tomcat:latest registry.cn-hangzhou.aliyuncs.com/chj-docker/chj-repository:1.0
[root@centos ~]# docker push registry.cn-hangzhou.aliyuncs.com/chj-docker/chj-repository:1.0
The push refers to repository [registry.cn-hangzhou.aliyuncs.com/chj-docker/chj-repository]
57abd3414dc1: Pushed
484a0d8c27e2: Pushed
c6d7f3b5ea74: Pushed
83549b96aeb8: Pushed
2653d992f4ef: Pushed
1.0: digest: sha256:832a63885d94637d2252a2cc6a5921c7153e4a144d3b90eada4ae763ddf8fe87 size: 1373
查看: