Docker笔记二

Docker笔记二

笔记一:https://blog.csdn.net/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

image-20210716173850956

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可以查看挂载信息:

image-20210720112229605

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:

image-20210720112742682

image-20210720113203129

查看主机的对应目录:

[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指令介绍
img
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端口:

image-20210721150244782

回到主机,在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相应目录,因为之前运行时做了挂载。

访问:

image-20210721160612853

查看日志:

[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
# 有一点点慢,需要等一会儿,可以再开一个终端学习下一个东西

去官网搜索镜像,发布成功:

image-20210721170126564

发布镜像到阿里云镜像仓库

登录阿里云:https://cr.console.aliyun.com/

创建个人版实例:(操作省略,很简单)

image-20210721165007911

在建仓库之前,先去建一个命名空间。

image-20210721165127630

然后按照提示创建仓库,这一步选择本地仓库就行:

image-20210721165532040

创建成功后,这里有操作指南,可以参考它进行发布镜像:

image-20210721165653690

# 这次发布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

查看:

image-20210721172041812

四、Docker流程小结

img

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要下载Docker笔记,首先需要了解Docker是什么以及其使用场景。 Docker是一种开源的容器化平台,可以帮助用户打包、部署和运行应用程序。通过使用容器化技术,用户无需担心运行环境的差异,可以将应用程序和其依赖项打包到一个可移植的容器中,随时在不同的环境中运行。 要下载Docker笔记,可以按照以下几个步骤进行操作: 1. 首先,需要在计算机上安装Docker。可以从Docker官方网站(https://www.docker.com/)上下载适合自己操作系统的Docker安装包,并按照安装指南进行安装。 2. 安装完成后,需要启动Docker服务。根据操作系统的不同,可以在启动菜单或终端中找到Docker应用程序,并点击打开。在Docker控制台中,可以查看、管理容器以及进行其他操作。 3. 接下来,需要搜索并下载Docker笔记的镜像。可以使用Docker Hub(https://hub.docker.com/)这个官方的镜像仓库,搜索关键词以找到合适的笔记镜像。在搜索结果中,会显示镜像的名称、描述、标签等信息,选择一个合适的镜像。 4. 找到想要下载的笔记镜像后,可以使用Docker命令行工具或Docker控制台中的图形界面来下载镜像。通过输入命令`docker pull 镜像名称:标签`,即可下载对应的笔记镜像到本地。 5. 下载完成后,可以使用`docker images`命令在本地查看已下载的镜像列表。根据下载的笔记镜像的名称和标签,可以使用`docker run`命令来创建并启动一个容器,从而运行笔记。 通过以上步骤,就可以成功下载Docker笔记并在本地运行。希望这些信息对您有帮助! ### 回答2: 要下载Docker笔记,首先需要知道从哪里获取这些笔记Docker有一个官方文档网站,其中包含了大量关于Docker的技术文档、教程和示例以及各种使用场景的说明。用户可以访问Docker官方网站,在文档部分进行浏览和搜索,找到所需的笔记。 在Docker官方文档网站上,用户可以按照主题、标签或关键字进行检索,以找到相关的笔记。网站还提供了各种文件格式的下载选项,包括PDF、EPUB和HTML版本,用户可以根据自己的使用习惯选择适合的格式进行下载。 此外,还有一些第三方资源库和网站提供了Docker相关的笔记下载。例如GitHub上有很多开源项目,其中包含了Docker的使用笔记和示例代码。用户可以通过在GitHub上搜索关键字"Docker笔记"或"Docker notes"来找到相关的项目,然后根据项目的说明进行下载。 总之,下载Docker笔记可以通过Docker官方文档网站或第三方资源库进行。用户可以根据自己的需求和偏好选择下载适合自己的格式和来源。 ### 回答3: 要下载 Docker 笔记,首先需要确保已经安装了 Docker 客户端工具。然后按照以下步骤进行下载: 1. 打开终端或命令提示符,输入以下命令来下载 Docker 笔记Docker 镜像: ``` docker pull [镜像名称] ``` 这里的 `[镜像名称]` 是 Docker Hub 上提供的 Docker 镜像名称,可以根据需要搜索并选择合适的镜像。 2. 等待镜像下载完成后,使用以下命令来创建和运行一个 Docker 容器,并将笔记下载到本地: ``` docker run -it --name [容器名称] [镜像名称] [下载命令] ``` 这里的 `[容器名称]` 是用于标识容器的名称,`[下载命令]` 是具体的下载命令,可以根据下载方式的不同进行相应的设置。 3. 等待下载完成后,可以使用以下命令来停止并删除容器: ``` docker stop [容器名称] docker rm [容器名称] ``` 这里的 `[容器名称]` 是之前创建容器时指定的名称。 通过以上步骤,你就可以成功下载 Docker 笔记到本地了。记得根据实际需求选择适合的 Docker 镜像和下载命令,同时也可以通过 Docker Hub 上的文档和社区提供的资源,了解更多有关 Docker 的使用方法和技巧。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值