栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

docker学习笔记4

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

docker学习笔记4

一、初识Dockerfile

方式二

dockerfile就是用来构建docker镜像的构建文件,是一些命令和脚本。通过这个脚本可以生成镜像,镜像是一层一层的,脚本有一个个命令,每个命令就是一层。编写dockerfile命令,指令都是大写

FROM centos
VOLUME ["volume01","volume02"]
CMD echo "---end---"
CMD /bin/bash
1.1 生成镜像

build Build an image from a Dockerfile

[root@zhouhao docker-test-volume]# docker build -f /home/docker-test-volume/dockerfile01 -t kuangshen/centos:1.0 .
Sending build context to Docker daemon  2.048kB
Step 1/4 : FROM centos
 ---> 5d0da3dc9764
Step 2/4 : VOLUME ["volume01","volume02"]
 ---> Running in 7540670d6792
Removing intermediate container 7540670d6792
 ---> fb0b219ac855
Step 3/4 : CMD echo "---end---"
 ---> Running in 0195dea5b72b
Removing intermediate container 0195dea5b72b
 ---> 926350f7666d
Step 4/4 : CMD /bin/bash
 ---> Running in 4513ae7da577
Removing intermediate container 4513ae7da577
 ---> b5f896be1be9
Successfully built b5f896be1be9
Successfully tagged kuangshen/centos:1.0

-f, --file string Name of the Dockerfile (Default is ‘PATH/Dockerfile’)-t, --tag list Name and optionally a tag in the ‘name:tag’ format 1.2 查看生成的镜像

[root@zhouhao docker-test-volume]# docker images
REPOSITORY         TAG       IMAGE ID       CREATED              SIZE
kuangshen/centos   1.0       b5f896be1be9   about a minute ago   231MB
tomcat-zhouhao     1.0       4a6332ef2158   22 hours ago         684MB
tomcat             latest    4ebba13e9156   2 days ago           680MB
mysql              5.7       0712d5dc1b14   10 days ago          448MB
nginx              latest    c316d5a335a5   10 days ago          142MB
centos             latest    5d0da3dc9764   4 months ago         231MB
1.3 进入生产的镜像
 docker run -it b5f896be1be9 /bin/bash

发现容器内挂载生成的目录

[root@ecd870e627d2 /]# ls -l
total 56
lrwxrwxrwx  1 root root    7 Nov  3  2020 bin -> usr/bin
drwxr-xr-x  5 root root  360 Feb  6 02:01 dev
drwxr-xr-x  1 root root 4096 Feb  6 02:01 etc
drwxr-xr-x  2 root root 4096 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 4096 Sep 15 14:17 lost+found
drwxr-xr-x  2 root root 4096 Nov  3  2020 media
drwxr-xr-x  2 root root 4096 Nov  3  2020 mnt
drwxr-xr-x  2 root root 4096 Nov  3  2020 opt
dr-xr-xr-x 86 root root    0 Feb  6 02:01 proc
dr-xr-x---  2 root root 4096 Sep 15 14:17 root
drwxr-xr-x 11 root root 4096 Sep 15 14:17 run
lrwxrwxrwx  1 root root    8 Nov  3  2020 sbin -> usr/sbin
drwxr-xr-x  2 root root 4096 Nov  3  2020 srv
dr-xr-xr-x 13 root root    0 Feb  6 02:01 sys
drwxrwxrwt  7 root root 4096 Sep 15 14:17 tmp
drwxr-xr-x 12 root root 4096 Sep 15 14:17 usr
drwxr-xr-x 20 root root 4096 Sep 15 14:17 var
drwxr-xr-x  2 root root 4096 Feb  6 02:01 volume01
drwxr-xr-x  2 root root 4096 Feb  6 02:01 volume02

发现宿主机的挂载路径

docker inspect ecd870e627d2

1.4 dockerfile小结

我们通常会用dockerfile的形式构建自己的镜像构建镜像时没有挂载卷,就需要手动挂载,命令是:-v 卷名:容器内路径 二、数据卷容器

不同容器之间实现数据同步
2.1 启动centos镜像

启动centos01镜像

[root@zhouhao _data]# docker run -it --name centos01 kuangshen/centos:1.0
[root@b9262e3651d6 /]# 

Ctrl+P+Q不停止容器,并且退出容器

启动centos02镜像
–volumes-from list Mount volumes from the specified container(s)

docker run -it --volumes-from centos01 --name centos02 kuangshen/centos:1.0

在centos01容器中创建的文件,可以同步到centos02容器中centos01就是数据卷容器启动centos03镜像

docker run -it --name centos03 --volumes-from centos01 kuangshen/centos:1.0

该技术可用于多个MySQL或者redis之间同步数据库 三、Docker File 3.1 Docker File构建镜像的步骤

dockerfile是用来构建docker镜像的文件
构建步骤:
1.编写一个dockerfile文件
2.docker build 构建成为一个镜像
3.docker run 运行镜像
4.docker push 发布镜像,可以发布到DockerHub或者阿里云镜像仓库很多官方镜像都是基础包,基础功能都没有,我们通常会自己制作镜像 3.2 Docker File指令

关键字都必须是大写字母,按照从上到下的顺序执行

#是注释

每条指令会创建提交一个新的镜像层

做镜像就需要编写Docker File文件

FROM,基础镜像

MAINTAINER #镜像是谁写的,姓名+邮箱

RUN #镜像构建的时候,需要运行的命令

ADD #添加tomcat镜像,tomcat压缩包

WORKDIR #镜像的工作目录

VOLUME #挂载主机目录

EXPOSE #对外指定端口

CMD #指定容器运行时,要执行的命令,替换命令

ENTRYPOINT #指定容器运行时,要执行的命令,可以追加命令

onBUILE #当构建一个被继承的dockerfile,这个时候就会运行ONBUILD指令,是一个触发指令

COPY #类似ADD命令,将文件拷贝到镜像中

ENV #构建容器的时候设置环境变量

四、构建自己的centos

docker hub中99%的镜像都是从FROM scratch镜像过来的

4.1 编写自己的centos的Docker File文件
FROM centos:7
MAINTAINER zhouhao<123@qq.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
4.2 通过编写的Docker File文件构建镜像,通过docker build命令
docker build -f mydockerfile-centos -t mycentos:0.1 .

-f, --file string Name of the Dockerfile (Default is ‘PATH/Dockerfile’)-t, --tag list Name and optionally a tag in the ‘name:tag’ format 4.3 查看并运行生成的镜像

[root@zhouhao dockerfile]# docker images
REPOSITORY         TAG       IMAGE ID       CREATED             SIZE
mycentos           0.1       8bb2e3836d93   about an hour ago   515MB
                 47b075e2c0d9   2 hours ago         231MB
kuangshen/centos   1.0       b5f896be1be9   2 days ago          231MB
tomcat-zhouhao     1.0       4a6332ef2158   3 days ago          684MB
tomcat             latest    4ebba13e9156   4 days ago          680MB
mysql              5.7       0712d5dc1b14   12 days ago         448MB
nginx              latest    c316d5a335a5   12 days ago         142MB
centos             7         eeb6ee3f44bd   4 months ago        204MB
centos             latest    5d0da3dc9764   4 months ago        231MB
docker run -it mycentos:0.1

直接到达环境设置中的工作目录

[root@25c7e4fecd8d local]# pwd
/usr/local

具有ifconfig命令

[root@25c7e4fecd8d local]# ifconfig
eth0: flags=4163  mtu 1500
        inet 172.18.0.2  netmask 255.255.0.0  broadcast 172.18.255.255
        ether 02:42:ac:12:00:02  txqueuelen 0  (Ethernet)
        RX packets 8  bytes 656 (656.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  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
4.4 查看镜像的生产过程,docker history 容器ID
[root@zhouhao dockerfile]# docker history 8bb2e3836d93
IMAGE          CREATED             CREATED BY                                      SIZE      COMMENT
8bb2e3836d93   about an hour ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "/bin…   0B        
4c4b13db9c62   about an hour ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B        
eabd0686f6bf   about an hour ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B        
6eba2612b7e0   about an hour ago   /bin/sh -c #(nop)  EXPOSE 80                    0B        
855b33fbf440   about an hour ago   /bin/sh -c yum -y install net-tools             155MB     
48edb1b8f841   about an hour ago   /bin/sh -c yum -y install vi                    156MB     
58621fa669cd   about an hour ago   /bin/sh -c #(nop) WORKDIR /usr/local            0B        
8a9fd6406711   about an hour ago   /bin/sh -c #(nop)  ENV MYPATH=/usr/local        0B        
c190425f9770   about an hour ago   /bin/sh -c #(nop)  MAINTAINER zhouhao<123@qq…   0B        
eeb6ee3f44bd   4 months ago        /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B        
      4 months ago        /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B        
      4 months ago        /bin/sh -c #(nop) ADD file:b3ebbe8bd304723d4…   204MB   
五、构建cmd命令的镜像 5.1 编写Docker File文件
FROM centos:7
CMD ["ls","-a"]
5.2 构建镜像

注意:命令最后的点号容易忘记,表示当前目录

[root@zhouhao dockerfile]# docker build -f docker-cmd-test -t cmdtest .
Sending build context to Docker daemon  3.072kB
Step 1/2 : FROM centos:7
 ---> eeb6ee3f44bd
Step 2/2 : CMD ["ls","-a"]
 ---> Running in b448178a3749
Removing intermediate container b448178a3749
 ---> 6fa04f9a0ea8
Successfully built 6fa04f9a0ea8
Successfully tagged cmdtest:latest
5.3 查看构建好的镜像
[root@zhouhao dockerfile]# docker images
REPOSITORY         TAG       IMAGE ID       CREATED          SIZE
cmdtest            latest    6fa04f9a0ea8   35 seconds ago   204MB
mycentos           0.1       8bb2e3836d93   2 days ago       515MB
                 47b075e2c0d9   3 days ago       231MB
kuangshen/centos   1.0       b5f896be1be9   5 days ago       231MB
tomcat-zhouhao     1.0       4a6332ef2158   6 days ago       684MB
tomcat             latest    4ebba13e9156   7 days ago       680MB
mysql              5.7       0712d5dc1b14   2 weeks ago      448MB
nginx              latest    c316d5a335a5   2 weeks ago      142MB
centos             7         eeb6ee3f44bd   4 months ago     204MB
centos             latest    5d0da3dc9764   4 months ago     231MB
5.4 运行构建好的镜像
[root@zhouhao dockerfile]# docker run 6fa04f9a0ea8
.
..
.dockerenv
anaconda-post.log
bin
dev
etc
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
5.5 追加-l命令,报错
[root@zhouhao ~]# docker run 6fa04f9a0ea8 -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.

-l命令替换了CMD [“ls”,"-a"]命令,实质上执行的是-l命令,而-l不是一个命令 六、构建entrypoint命令的镜像 6.1 编写Docker File文件

FROM centos
ENTRYPOINT ["ls","-a"]
6.2 生成镜像文件
[root@zhouhao dockerfile]# docker build -f docker-entrypoint-test -t entrypoint-test .
Sending build context to Docker daemon  4.096kB
Step 1/2 : FROM centos
 ---> 5d0da3dc9764
Step 2/2 : ENTRYPOINT ["ls","-a"]
 ---> Running in a878562cb6fa
Removing intermediate container a878562cb6fa
 ---> 2ce3b22fd611
Successfully built 2ce3b22fd611
Successfully tagged entrypoint-test:latest
6.3 运行镜像文件
[root@zhouhao dockerfile]# docker run 2ce3b22fd611
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
6.4 追加-l命令,运行镜像文件
[root@zhouhao ~]# docker run 2ce3b22fd611 -l
total 56
drwxr-xr-x  1 root root 4096 Feb 11 10:10 .
drwxr-xr-x  1 root root 4096 Feb 11 10:10 ..
-rwxr-xr-x  1 root root    0 Feb 11 10:10 .dockerenv
lrwxrwxrwx  1 root root    7 Nov  3  2020 bin -> usr/bin
drwxr-xr-x  5 root root  340 Feb 11 10:10 dev
drwxr-xr-x  1 root root 4096 Feb 11 10:10 etc
drwxr-xr-x  2 root root 4096 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 4096 Sep 15 14:17 lost+found
drwxr-xr-x  2 root root 4096 Nov  3  2020 media
drwxr-xr-x  2 root root 4096 Nov  3  2020 mnt
drwxr-xr-x  2 root root 4096 Nov  3  2020 opt
dr-xr-xr-x 93 root root    0 Feb 11 10:10 proc
dr-xr-x---  2 root root 4096 Sep 15 14:17 root
drwxr-xr-x 11 root root 4096 Sep 15 14:17 run
lrwxrwxrwx  1 root root    8 Nov  3  2020 sbin -> usr/sbin
drwxr-xr-x  2 root root 4096 Nov  3  2020 srv
dr-xr-xr-x 13 root root    0 Feb  6 02:03 sys
drwxrwxrwt  7 root root 4096 Sep 15 14:17 tmp
drwxr-xr-x 12 root root 4096 Sep 15 14:17 usr
drwxr-xr-x 20 root root 4096 Sep 15 14:17 var
6.5 entrypoint命令与cmd命令的区别

entrypoint可以直接在后面追加命令参数,而不是替换整个命令cmd命令会整个替换掉命令,不支持追加命令 七、实战:构建tomcat镜像 7.1 准备工作

准备镜像文件,tomcat压缩包,jdk压缩包tomcat下载地址:https://mirrors.huaweicloud.com/apache/tomcat/tomcat-9/v9.0.22/bin/jdk下载地址:https://mirrors.huaweicloud.com/java/jdk/8u151-b12/ 7.2 编写dockerfile文件

把文件命明为Dockerfile,这是官方命名,build会自动寻找这个文件,就不需要-f指定文件了

FROM centos:7
MAINTAINER zhouhao<123@qq.com>
COPY readme.txt /usr/local/readme.txt
ADD jdk-8u151-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.22.tar.gz /usr/local/


ENV MYPATH /usr/local/
WORKDIR $MYPATH

ENV JAVA_HOME /usr/local/jdk1.8.0_151
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.22
ENV CATALINA_base /usr/local/apache-tomcat-9.0.22
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin


EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.22/bin/startup.sh && tail -f /usr/local/apache-tomcat-9.0.22/logs/catalina.out
7.3 构建tomcat镜像
[root@zhouhao tomcat]# docker build -t diytomcat .
Sending build context to Docker daemon  200.7MB
Step 1/14 : FROM centos:7
 ---> eeb6ee3f44bd
Step 2/14 : MAINTAINER zhouhao<123@qq.com>
 ---> Using cache
 ---> c190425f9770
Step 3/14 : COPY readme.txt /usr/local/readme.txt
 ---> 7c03471412a4
Step 4/14 : ADD jdk-8u151-linux-x64.tar.gz /usr/local/
 ---> d0c79719de08
Step 5/14 : ADD apache-tomcat-9.0.22.tar.gz /usr/local/
 ---> 06fd3f81c15e
Step 6/14 : ENV MYPATH /usr/local/
 ---> Running in d82f18a94d54
Removing intermediate container d82f18a94d54
 ---> 8109021ee2c6
Step 7/14 : WORKDIR $MYPATH
 ---> Running in da35f83b1705
Removing intermediate container da35f83b1705
 ---> e1dcfaa2ff68
Step 8/14 : ENV JAVA_HOME /usr/local/jdk1.8.0_11
 ---> Running in 0fcb2b9cc317
Removing intermediate container 0fcb2b9cc317
 ---> 486b3d24132c
Step 9/14 : ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
 ---> Running in 8ec07a30b084
Removing intermediate container 8ec07a30b084
 ---> 2c81c404773c
Step 10/14 : ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.22
 ---> Running in f795daf83c54
Removing intermediate container f795daf83c54
 ---> ef9236f85235
Step 11/14 : ENV CATALINA_base /usr/local/apache-tomcat-9.0.22
 ---> Running in 87e6f1a4e8d1
Removing intermediate container 87e6f1a4e8d1
 ---> f9da85083198
Step 12/14 : ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
 ---> Running in 4345ae834319
Removing intermediate container 4345ae834319
 ---> 83ad9c8a482f
Step 13/14 : EXPOSE 8080
 ---> Running in b3c5d4fa1512
Removing intermediate container b3c5d4fa1512
 ---> f1c381220e87
Step 14/14 : CMD /usr/local/apache-tomcat-9.0.22/bin/startup.sh && tail -f /usr/local/apache-tomcat-9.0.22/bin/logs/catalina.out
 ---> Running in e952c27f0b54
Removing intermediate container e952c27f0b54
 ---> 7fe3bef56dbb
Successfully built 7fe3bef56dbb
Successfully tagged diytomcat:latest
7.4 启动tomcat镜像
[root@zhouhao tomcat]# docker run -d -p 9090:8080 --name tomcat-zhouhao -v /home/zhouhao/build/tomcat/test:/usr/local/apache-tomcat-9.0.22/webapps/test -v /home/zhouhao/build/tomcat/tomcatlogs:/usr/local/apache-tomcat-9.0.22/logs fb1b20aee317
d245f6e24cfb5549a8ca8d0d470a34fdc3b59f4629acbbbb74e7021396cdfd49

查看启动成功的tomcat容器

[root@zhouhao tomcat]# docker ps
ConTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                                       NAMES
d245f6e24cfb   fb1b20aee317   "/bin/sh -c '/usr/lo…"   7 seconds ago   Up 6 seconds   0.0.0.0:9090->8080/tcp, :::9090->8080/tcp   tomcat-zhouhao
7.5 进入到tomcat容器
[root@zhouhao tomcat]# docker exec -it d245f6e24cfb /bin/bash

-it必须加上,否则无法进入,-it的意思是以交互模式进入容器 7.6 访问tomcat测试

[root@zhouhao tomcat]# curl localhost:9090





    
        
        Apache Tomcat/9.0.22
        
        
        
    

    
        

Apache Tomcat/9.0.22

If you're seeing this, you've successfully installed Tomcat. Congratulations!


Managing Tomcat

For security, access to the manager webapp is restricted. Users are defined in:

$CATALINA_HOME/conf/tomcat-users.xml

In Tomcat 9.0 access to the manager application is split between different users.   Read more...


Release Notes

Changelog

Migration Guide

Security Notices

八、发布镜像到dockerhub 8.1 登录
docker login -u zhouhao123321
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

更改镜像的名字,docker tag 命令

 docker tag diytomcat zhouhao123321/diytomcat
[root@zhouhao ~]# docker images
REPOSITORY                TAG       IMAGE ID       CREATED             SIZE
diytomcat                 latest    fb1b20aee317   about an hour ago   604MB
zhouhao123321/diytomcat   latest    fb1b20aee317   about an hour ago   604MB
entrypoint-test           latest    2ce3b22fd611   28 hours ago        231MB
cmdtest                   latest    6fa04f9a0ea8   35 hours ago        204MB
mycentos                  0.1       8bb2e3836d93   4 days ago          515MB
                        47b075e2c0d9   4 days ago          231MB
kuangshen/centos          1.0       b5f896be1be9   6 days ago          231MB
tomcat-zhouhao            1.0       4a6332ef2158   7 days ago          684MB
tomcat                    latest    4ebba13e9156   8 days ago          680MB
mysql                     5.7       0712d5dc1b14   2 weeks ago         448MB
nginx                     latest    c316d5a335a5   2 weeks ago         142MB
centos                    7         eeb6ee3f44bd   4 months ago        204MB
centos                    latest    5d0da3dc9764   4 months ago        231MB
8.2 发布镜像
docker push zhouhao123321/diytomcat
Using default tag: latest
The push refers to repository [docker.io/zhouhao123321/diytomcat]
九、docker小结

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/740160.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号