侧边栏壁纸
博主头像
一揽芳华 博主等级

行动起来,活在当下

  • 累计撰写 265 篇文章
  • 累计创建 24 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

dockerfile

芳华是个男孩!
2024-10-11 / 0 评论 / 0 点赞 / 13 阅读 / 0 字
广告 广告

1、什么是dockerfile

DockerFile 是一种被Docker程序解释的脚本,DockerFile是由一条条的命令组成的,每条命令对应linux下面的一条命令,Docker程序将这些DockerFile指令再翻译成真正的linux命令,其有自己的书写方式和支持的命令,Docker程序读取DockerFile并根据指令生成Docker镜像,相比手动制作镜像的方式,DockerFile更能直观的展示镜像是怎么产生的,有了DockerFile,当后期有额外的需求时,只要在之前的DockerFile添加或者修改响应的命令即可重新生成新的Docke镜像,避免了重复手动制作镜像的麻烦,类似与shell脚本一样,可以方便高效的制作镜像

Dockerfile 镜像制作和使用流程

Dockerfile文件的制作镜像的分层结构

2、dockerfile指令解读

#### 2.1.FROM
​
功能为指定基础镜像,并且必须是第一条指令。 如果不以任何镜像为基础,那么写法为:FROM scratch。 同 时意味着接下来所写的指令将作为镜像的第一层开始
​
#### 2.2.MAINTAINER
​
镜像创建维护者信息
​
#### 2.3.RUN
​
功能为运行指定的命令
​
注意:多行命令不要写多个RUN,原因是Dockerfile中每一个指令都会建立一层. 多少个RUN就构建了多 少层镜像,会造成镜像的臃肿、多层,不仅仅增加了构件部署的时间,还容易出错。 RUN书写时的换行符是\
​
#### 2.4.CMD
​
功能为容器启动时要运行的命令
​
注意:补充细节:这里边包括参数的一定要用双引号,就是",不能是单引号。千万不能写成单引号。 原因是参数传递后,docker解析的是一个JSON array
​
#### 2.5.RUN和CMD的区别
​
不要把RUN和CMD搞混了。 RUN是构件容器时就运行的命令以及提交运行结果 CMD是容器启动时执行的命 令,在构件时并不运行,构件时紧紧指定了这个命令到底是个什么样子
​
#### 2.6.LABEL
​
功能是为镜像指定标签,为镜像写一些注释信息
​
但是并不建议这样写,最好就写成一行,如太长需要换行的话则使用\符号 如下:
​
注意:LABEL会继承基础镜像种的LABEL,如遇到key相同,则值覆盖
​
#### 2.7.EXPOSE
​
功能为暴漏容器运行时的监听端口给外部 但是EXPOSE并不会vim 使容器访问主机的端口 如果想使得容器与主 机的端口有映射关系,必须在容器启动的时候加上 -P参数
​
注意:如果在端口号后面加/tcp,默认为tcp协议,如果需要UDP端口需要添加/udp
​
#### 2.8.ENV
​
功能为设置环境变量
​
#### 2.9.ADD
​
一个复制命令,把文件复制到镜象中。 如果把虚拟机与容器想象成两台linux服务器的话,那么这个命令就类似 于scp,只是scp需要加用户名和密码的权限验证,而ADD不用。
​
注意:尽量不要把写成一个文件夹,如果是一个文件夹了,复制整个目录的内容,包括文件系统元数据
​
#### 2.10.WORKDIR
​
设置工作目录,对RUN,CMD,ENTRYPOINT,,ADD生效。如果不存在则会创建,也可以设置多次
​
#### 2.11.VOLUME
​
可实现挂载功能,可以将内部文件夹挂载到外部
​
#### 2.12.ENTRYPOINT
​
该命令与CMD类似,用于执行命令使用,还可以与CMD命令一起拼合使用
​
它与CMD的区别:  相同点:只能写一条,如果写多条,那么只有最后一条生效
​
不同点:CMD在创建容器时,在后面添加其他的CMD指令,CMD会被覆盖,但是ENTRYPOINT不会被覆盖,如果两个同时使用,CMD会变成ENTRYPOINT的参数
​
#### 2.13.ONBUILD
​
当构建一个被继承 Dcokerfile 这个时候就会触发运行ONBUILD命令。
​
#### 2.14.
​
类似ADD命令,将文件拷贝到镜像中

3.使用DockerFile构建自己的镜像

Docker Hub中99%镜像都是从这个基础镜像过来的FROM scratch,然后配置需要的软件和配置来进行构建

3.1.创建一个自己的centos镜像

官方镜像属于极限压缩版缺少一些命令,我们构建一个自己的镜像添加一些命令,比如vim命令和ifconfig命令

3.1.1.创建工作目录

[root@localhost ~]# mkdir dockerfile
[root@localhost ~]# cd dockerfile/
[root@localhost dockerfile]#

3.1.2.创建dockerfile文件

[root@localhost dockerfile]# touch dockerfile-centos

3.1.3.编辑dockerfile文件

[root@localhost dockerfile]# vim dockerfile-centos
FROM centos:7
MAINTAINER zxw<zxw@xxjsjl.cn>
​
#环境变量
ENV MYPATH /usr/local
WORKDIR $MYPATH
​
#添加执行过程命令等
RUN yum install -y vim
RUN yum install -y net-tools
​
#暴露端口
EXPOSE 80
​
#启动时运行的命令
CMD echo $MYPATH
CMD echo "-------end-------"
CMD /bin/bash

3.1.4.构建镜像

[root@localhost dockerfile]# docker build -f dockerfile-centos -t mycentos:0.1 .
[+] Building 40.5s (8/8) FINISHED                                                            docker:default
 => [internal] load .dockerignore                                                                      0.0s
 => => transferring context: 2B                                                                        0.0s
 => [internal] load build definition from dockerfile-centos                                            0.0s
 => => transferring dockerfile: 435B                                                                   0.0s
 => [internal] load metadata for docker.io/library/centos:7                                           16.0s
 => CACHED [1/4] FROM docker.io/library/centos:7@sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe757  0.0s
 => [2/4] WORKDIR /usr/local                                                                           0.1s
 => [3/4] RUN yum install -y vim                                                                      21.1s
 => [4/4] RUN yum install -y net-tools                                                                 1.9s
 => exporting to image                                                                                 1.2s
 => => exporting layers                                                                                1.2s
 => => writing image sha256:13f3ef13eced3e0de61356fea7ee7ec097d1af1caa85c980994c08762e3d4c9b           0.0s
 => => naming to docker.io/library/mycentos:0.1                                                        0.0s
​
[root@localhost dockerfile]# docker images
REPOSITORY            TAG       IMAGE ID       CREATED          SIZE
mycentos              0.1       13f3ef13eced   23 seconds ago   666MB

3.1.5.使用自己的镜像创建一个容器,并检查添加的命令是否存在

[root@localhost dockerfile]# docker run -d -it --name mycentos mycentos:0.1
e88e58afbc0f58f9886876ba3f910bd2f35a842851d532243f711c2cef6166b4
[root@localhost dockerfile]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS     NAMES
e88e58afbc0f   mycentos:0.1   "/bin/sh -c /bin/bash"   4 seconds ago   Up 2 seconds   80/tcp    mycentos
[root@localhost dockerfile]# docker exec -it mycentos bash
​
#vi并tab发现存在vim命令
[root@e88e58afbc0f local]# vi
vi        view      vigr      vim       vimdiff   vimtutor  vipw
​
#使用ifconfig查看网卡ip地址信息
[root@e88e58afbc0f local]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 18  bytes 2306 (2.2 KiB)
        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@e88e58afbc0f local]#

3.1.6.查看镜像的构建历史

[root@localhost dockerfile]# docker history mycentos:0.1
IMAGE          CREATED          CREATED BY                                      SIZE      COMMENT
13f3ef13eced   29 minutes ago   CMD ["/bin/sh" "-c" "/bin/bash"]                0B        buildkit.dockerfile.v0
<missing>      29 minutes ago   CMD ["/bin/sh" "-c" "echo \"-------end------…   0B        buildkit.dockerfile.v0
<missing>      29 minutes ago   CMD ["/bin/sh" "-c" "echo $MYPATH"]             0B        buildkit.dockerfile.v0
<missing>      29 minutes ago   EXPOSE map[80/tcp:{}]                           0B        buildkit.dockerfile.v0
<missing>      29 minutes ago   RUN /bin/sh -c yum install -y net-tools # bu…   189MB     buildkit.dockerfile.v0
<missing>      29 minutes ago   RUN /bin/sh -c yum install -y vim # buildkit    274MB     buildkit.dockerfile.v0
<missing>      29 minutes ago   WORKDIR /usr/local                              0B        buildkit.dockerfile.v0
<missing>      29 minutes ago   ENV MYPATH=/usr/local                           0B        buildkit.dockerfile.v0
<missing>      29 minutes ago   MAINTAINER zxw<zxw@xxjsjl.cn>                   0B        buildkit.dockerfile.v0
<missing>      23 months ago    /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B
<missing>      23 months ago    /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B
<missing>      23 months ago    /bin/sh -c #(nop) ADD file:b3ebbe8bd304723d4…   204MB

我们平时拿到的镜像,可以研究它是怎么做的

3.2.CMD和ENTRYPOINT区别

id="h4-cmd">CMD

功能为容器启动时要运行的命令,只有最后一条会生效

注意:补充细节:这里边包括参数的一定要用双引号,就是",不能是单引号。千万不能写成单引号。 原因是参数传递后,docker解析的是一个JSON array

ENTRYPOINT

该命令与CMD类似,用于执行命令使用,还可以与CMD命令一起拼合使用

它与CMD的区别: 相同点:只能写一条,如果写多条,那么只有最后一条生效

不同点:CMD在创建容器时,在后面添加其他的CMD指令,CMD会被覆盖,但是ENTRYPOINT不会被覆盖,如果两个同时使用,CMD会变成ENTRYPOINT的参数

3.2.1.测试cmd

[root@localhost dockerfile]# vim dockerfile-cmd-test
FROM centos:7
CMD ["ls","-a"]
​
[root@localhost dockerfile]# docker build -f dockerfile-cmd-test -t cmd-test:0.1 .
[+] Building 0.8s (5/5) FINISHED                                                                                                                       docker:default
 => [internal] load build definition from dockerfile-cmd-test                                                                                                    0.0s
 => => transferring dockerfile: 136B                                                                                                                             0.0s
 => [internal] load .dockerignore                                                                                                                                0.0s
 => => transferring context: 2B                                                                                                                                  0.0s
 => [internal] load metadata for docker.io/library/centos:7                                                                                                      0.3s
 => CACHED [1/1] FROM docker.io/library/centos:7@sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987                                         0.0s
 => exporting to image                                                                                                                                           0.5s
 => => exporting layers                                                                                                                                          0.0s
 => => writing image sha256:06f2cc65ea4ade90802e89678c89aca197bf6ffc2c56c531355fd659627f6493                                                                     0.0s
 => => naming to docker.io/library/cmd-test:0.1  
​
[root@localhost dockerfile]# docker run -it cmd-test:0.1    #命令ls -a生效
.  ..  .dockerenv  anaconda-post.log  bin  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
​
[root@localhost dockerfile]# docker history cmd-test:0.1
IMAGE          CREATED         CREATED BY                                      SIZE      COMMENT
06f2cc65ea4a   23 months ago   CMD ["ls" "-a"]                                 0B        buildkit.dockerfile.v0
<missing>      23 months ago   /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B
<missing>      23 months ago   /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B
<missing>      23 months ago   /bin/sh -c #(nop) ADD file:b3ebbe8bd304723d4…   204MB

想追加一个命令 -l ls -al,cmd的清理 -l会被替换cmd["ls","-a"] 命令,-l不是命令所以报错。

[root@localhost dockerfile]# docker run -it cmd-test:0.1 -l
docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "-l": executable file not found in $PATH: unknown.

如果想要执行,需要写完整命令

[root@localhost dockerfile]# docker run -it cmd-test:0.1 ls -al
total 12
drwxr-xr-x.   1 root root     6 Aug 14 08:04 .
drwxr-xr-x.   1 root root     6 Aug 14 08:04 ..
-rwxr-xr-x.   1 root root     0 Aug 14 08:04 .dockerenv
-rw-r--r--.   1 root root 12114 Nov 13  2020 anaconda-post.log
lrwxrwxrwx.   1 root root     7 Nov 13  2020 bin -> usr/bin
drwxr-xr-x.   5 root root   360 Aug 14 08:04 dev
drwxr-xr-x.   1 root root    66 Aug 14 08:04 etc
drwxr-xr-x.   2 root root     6 Apr 11  2018 home
lrwxrwxrwx.   1 root root     7 Nov 13  2020 lib -> usr/lib
lrwxrwxrwx.   1 root root     9 Nov 13  2020 lib64 -> usr/lib64
drwxr-xr-x.   2 root root     6 Apr 11  2018 media
drwxr-xr-x.   2 root root     6 Apr 11  2018 mnt
drwxr-xr-x.   2 root root     6 Apr 11  2018 opt
dr-xr-xr-x. 267 root root     0 Aug 14 08:04 proc
dr-xr-x---.   2 root root   114 Nov 13  2020 root
drwxr-xr-x.  11 root root   148 Nov 13  2020 run
lrwxrwxrwx.   1 root root     8 Nov 13  2020 sbin -> usr/sbin
drwxr-xr-x.   2 root root     6 Apr 11  2018 srv
dr-xr-xr-x.  13 root root     0 Aug 14 06:17 sys
drwxrwxrwt.   7 root root   132 Nov 13  2020 tmp
drwxr-xr-x.  13 root root   155 Nov 13  2020 usr
drwxr-xr-x.  18 root root   238 Nov 13  2020 var

3.2.2.测试ENTRYPOINT

[root@localhost dockerfile]# vim dockerfile-entrypoint-test
[root@localhost dockerfile]# cat dockerfile-entrypoint-test
FROM centos:7
ENTRYPOINT ["ls","-a"]

[root@localhost dockerfile]# docker build -f dockerfile-entrypoint-test -t entrypoint:0.1 .
[+] Building 15.4s (5/5) FINISHED                                                                                                                      docker:default
 => [internal] load build definition from dockerfile-entrypoint-test                                                                                             0.0s
 => => transferring dockerfile: 151B                                                                                                                             0.0s
 => [internal] load .dockerignore                                                                                                                                0.0s
 => => transferring context: 2B                                                                                                                                  0.0s
 => [internal] load metadata for docker.io/library/centos:7                                                                                                     15.3s
 => CACHED [1/1] FROM docker.io/library/centos:7@sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987                                         0.0s
 => exporting to image                                                                                                                                           0.0s
 => => exporting layers                                                                                                                                          0.0s
 => => writing image sha256:5184c7d459a0111136914d90d94e7121f7fce3c2746b17b74fc2f1e808a37da8                                                                     0.0s
 => => naming to docker.io/library/entrypoint:0.1                                                                                                                0.0s
[root@localhost dockerfile]# docker run entrypoint:0.1
.
..
.dockerenv
anaconda-post.log
bin
dev
etc
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
[root@localhost dockerfile]# docker run entrypoint:0.1 -l    #可以直接追加命令
total 12
drwxr-xr-x.   1 root root     6 Aug 14 08:09 .
drwxr-xr-x.   1 root root     6 Aug 14 08:09 ..
-rwxr-xr-x.   1 root root     0 Aug 14 08:09 .dockerenv
-rw-r--r--.   1 root root 12114 Nov 13  2020 anaconda-post.log
lrwxrwxrwx.   1 root root     7 Nov 13  2020 bin -> usr/bin
drwxr-xr-x.   5 root root   340 Aug 14 08:09 dev
drwxr-xr-x.   1 root root    66 Aug 14 08:09 etc
drwxr-xr-x.   2 root root     6 Apr 11  2018 home
lrwxrwxrwx.   1 root root     7 Nov 13  2020 lib -> usr/lib
lrwxrwxrwx.   1 root root     9 Nov 13  2020 lib64 -> usr/lib64
drwxr-xr-x.   2 root root     6 Apr 11  2018 media
drwxr-xr-x.   2 root root     6 Apr 11  2018 mnt
drwxr-xr-x.   2 root root     6 Apr 11  2018 opt
dr-xr-xr-x. 265 root root     0 Aug 14 08:09 proc
dr-xr-x---.   2 root root   114 Nov 13  2020 root
drwxr-xr-x.  11 root root   148 Nov 13  2020 run
lrwxrwxrwx.   1 root root     8 Nov 13  2020 sbin -> usr/sbin
drwxr-xr-x.   2 root root     6 Apr 11  2018 srv
dr-xr-xr-x.  13 root root     0 Aug 14 06:17 sys
drwxrwxrwt.   7 root root   132 Nov 13  2020 tmp
drwxr-xr-x.  13 root root   155 Nov 13  2020 usr
drwxr-xr-x.  18 root root   238 Nov 13  2020 var

3.3.构建一个Tomcat镜像

3.3.1.准备镜像文件 Tomcat压缩包,jdk的压缩包
[root@localhost tomcat]# ls
apache-tomcat-9.0.78.tar.gz  jdk-8u201-linux-x64.tar.gz    readme.txt

3.3.2.编写dockerfile文件,官方命名:Dockerfile 构建的时候会自动寻找这个文件,就不要-f指定
FROM centos8:0.1

MAINTAINER zxw<zxw@xxjsjl.cn>

# 把宿主机当前上下文的readme.txt拷贝到容器/usr/local/路径下
 readme.txt /usr/local/cincontainer.txt

# 把java和tomcat添加到容器中(会自动解压)
ADD jdk-8u201-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.78.tar.gz /usr/local/

# 安装vim编辑器
RUN yum -y install vim
# 设置启动访问的初始位置,即工作目录,登录落脚点
ENV MYPATH /usr/local
WORKDIR $MYPATH

# 配置java和tomcat的环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_201
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINE_HOME /usr/local/apache-tomcat-9.0.78
ENV CATALINE_BASE /usr/local/apache-tomcat-9.0.78
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINE_HOME/lib:$CATALINE_HOME/bin

EXPOSE 8080
# 容器启动后要执行的命令
CMD /usr/local/apache-tomcat-9.0.78/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.78/bin/logs/catalina.out

3.3.3.构建镜像
[root@localhost tomcat]# docker build -t mytomcat .
[+] Building 56.1s (11/11) FINISHED                                                                                                                    docker:default
 => [internal] load build definition from Dockerfile                       0.0s
 => => transferring dockerfile: 732B                                       0.0s
 => [internal] load .dockerignore                                          0.0s
 => => transferring context: 2B                                            0.0s
 => [internal] load metadata for docker.io/library/centos:7                15.3s
 => CACHED [1/6] FROM docker.io/library/centos:7@sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987                 0.0s
 => [internal] load build context                                          3.7s
 => => transferring context: 161.75MB                                      3.7s
 => [2/6]  readme.txt /usr/local/readme.txt                            0.3s
 => [3/6] ADD jdk-8u11-linux-x64.tar.gz /usr/local/                        8.1s
 => [4/6] ADD apache-tomcat-9.0.22.tar.gz /usr/local/                      0.1s
 => [5/6] RUN yum -y install vim                                           27.3s
 => [6/6] WORKDIR /usr/local                                               0.0s
 => exporting to image                                                     1.2s
 => => exporting layers                                                     1.2s
 => => writing image sha256:1b36d60ec8b7fec6519ea1e630451c0c97d66b1f058a34a357ef8ffb537ae798                 0.0s
 => => naming to docker.io/library/mytomcat                        

3.3.4.使用镜像快速创建容器
[root@localhost tomcat]# docker run -d -p 8080:8080 mytomcat:0.1
[root@localhost tomcat]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                                       NAMES
32240222b32d   mytomcat:0.1   "/bin/sh -c '/usr/lo…"   3 minutes ago   Up 3 minutes   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   recursing_agnesi

3.3.5.简单测试访问

3.3.6.创建容器并挂载本地目录,发布一个简单页面

(1)创建容器,命名tomcat01,并挂载相关目录

[root@localhost ~]# docker run -d -it -p 8080:8080 --name tomcat01 -v /usr/local/tomcat/webapps:/usr/local/apache-tomcat-9.0.78/webapps -v /usr/local/tomcat/tomcatlogs:/usr/local/apache-tomcat-9.0.78/logs mytomcat:0.1
c37b47bf75e8cb0aa7abd8c089527d00acc041fcecd8b0b85d5e759fb4e098ac

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                                       NAMES
c37b47bf75e8   mytomcat:0.1   "/bin/sh -c '/usr/lo…"   8 seconds ago   Up 5 seconds   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   tomcat01

(2)添加test目录,及测试文件

[root@localhost webapps]# mkdir test
[root@localhost test]# vim index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>index page</title>
</head>
<body>
    <h1>my index page</h1>
</body>
</html>

(3)重启容器测试访问

[root@localhost test]# docker restart tomcat01

3.4.构建一个基于rpm安装的mysql镜像

通过rmp包二进制安装构建mysql镜像,基础镜像是有centos7

3.4.1.创建目录及所需文件
[root@localhost ~]# mkdir mysql

3.4.2编写dockerfile文件
[root@localhost mysql]# vim Dockerfie
FROM centos:centos7.9.2009

MAINTAINER zxw<zxw@xxjsjl.cn>

VOLUME ["mysql_1","mysql_2"]

RUN yum install -y wget && yum -y install https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm && rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
RUN yum -y install mysql-community-server

EXPOSE 3306
CMD ["/usr/sbin/init"]

3.4.3.构建mysql镜像
[root@localhost mysql]# docker build -t mysql57:1.0 .
[+] Building 4.5s (7/7) FINISHED                                                                                                                                                                     docker:default
 => [internal] load build definition from Dockerfile                                                                                                                                                           0.0s
 => => transferring dockerfile: 440B                                                                                                                                                                           0.0s
 => [internal] load .dockerignore                                                                                                                                                                              0.0s
 => => transferring context: 2B                                                                                                                                                                                0.0s
 => [internal] load metadata for docker.io/library/centos:centos7.9.2009                                                                                                                                       0.0s
 => [1/3] FROM docker.io/library/centos:centos7.9.2009                                                                                                                                                         0.0s
 => CACHED [2/3] RUN yum install -y wget && yum -y install https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm && rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022                 0.0s
 => CACHED [3/3] RUN yum -y install mysql-community-server                                                                                                                                                     0.0s
 => exporting to image                                                                                                                                                                                         4.4s
 => => exporting layers                                                                                                                                                                                        4.4s
 => => writing image sha256:726c077a2aebfb9c1816b4444e3d2b9d19365d29e69d4bcaaa29791d0abb4a0e                                                                                                                   0.0s
 => => naming to docker.io/library/mysql57:1.0                                                                                                                                                                 0.0s

3.4.4.创建一个容器
[root@localhost mysql]# docker run -itd --name mysql01 --privileged=true  mysql57:1.0 /usr/sbin/init
965bb59093a03f4ed6d47d0e2c9da68eaae7a9b95feca3aca367a72d01892a24
[root@localhost mysql]# docker exec -it mysql01 systemctl status mysqld
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: activating (start) since Thu 2023-08-24 08:55:52 UTC; 5s ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 113 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
  Process: 54 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
   CGroup: /docker/965bb59093a03f4ed6d47d0e2c9da68eaae7a9b95feca3aca367a72d01892a24/system.slice/mysqld.service
           └─115 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid

Aug 24 08:55:52 965bb59093a0 systemd[1]: Starting MySQL Server...
Aug 24 08:55:56 965bb59093a0 systemd[1]: New main PID 115 does not belong to service, and PID file is not owned by root. Refusing.
Aug 24 08:55:56 965bb59093a0 systemd[1]: New main PID 115 does not belong to service, and PID file is not owned by root. Refusing.

#出现报错信息,原因是映射cgroup内核限制资源目录,解决方法,添加映射目录-v /sys/fs/cgroup:/sys/fs/cgroup

[root@localhost mysql]# docker run -itd --name mysql02 -v /sys/fs/cgroup:/sys/fs/cgroup --privileged=true  mysql57:1.0 /usr/sbin/init
bdfdc08c475058623460f7cab15d389fc13d5dd908cae687922c497ce1b9029a
[root@localhost mysql]# docker exec -it mysql02 systemctl status mysqld
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2023-08-24 08:57:06 UTC; 1s ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 114 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
  Process: 54 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
 Main PID: 116 (mysqld)
   CGroup: /docker/bdfdc08c475058623460f7cab15d389fc13d5dd908cae687922c497ce1b9029a/system.slice/mysqld.service
           └─116 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid

Aug 24 08:57:02 bdfdc08c4750 systemd[1]: Starting MySQL Server...
Aug 24 08:57:06 bdfdc08c4750 systemd[1]: Started MySQL Server.

3.5.构建一个基于rpm安装的php8.0镜像

3.5.1.创建目录及所需文件
[root@localhost ~]# mkdir php

3.5.2.编写Dockerfile文件
[root@localhost php]# vim Dockerfie
FROM centos:centos7.9.2009

MAINTAINER zxw<zxw@xxjsjl.cn>

VOLUME ["php80_1","php80_2"]

RUN yum install -y wget && yum -y install https://mirrors.tuna.tsinghua.edu.cn/remi/enterprise/remi-release-7.rpm && yum -y install yum-utils
RUN yum -y install php80-php-cli php80-php-common php80-php-devel php80-php-embedded php80-php-fpm php80-php-gd php80-php-mbstring php80-php-mysqlnd php80-php-pdo php80-php-opcache php80-php-xml php80-php-soap
RUN ln -sf /opt/remi/php80/root/usr/bin/php* /usr/local/bin

RUN ln -s /usr/lib/systemd/system/php80-php-fpm.service /etc/systemd/system/multi-user.target.wants/php80-php-fpm.service

EXPOSE 9000
CMD ["/usr/sbin/init"]

3.5.3.构建镜像
[root@localhost php]# docker build -t php80:1.0 .
[+] Building 0.3s (9/9) FINISHED                                                                                                                                                                     docker:default
 => [internal] load build definition from Dockerfile                                                                                                                                                           0.0s
 => => transferring dockerfile: 759B                                                                                                                                                                           0.0s
 => [internal] load .dockerignore                                                                                                                                                                              0.0s
 => => transferring context: 2B                                                                                                                                                                                0.0s
 => [internal] load metadata for docker.io/library/centos:centos7.9.2009                                                                                                                                       0.0s
 => [1/5] FROM docker.io/library/centos:centos7.9.2009                                                                                                                                                         0.0s
 => CACHED [2/5] RUN yum install -y wget && yum -y install https://mirrors.tuna.tsinghua.edu.cn/remi/enterprise/remi-release-7.rpm && yum -y install yum-utils                                                 0.0s
 => CACHED [3/5] RUN yum -y install php80-php-cli php80-php-common php80-php-devel php80-php-embedded php80-php-fpm php80-php-gd php80-php-mbstring php80-php-mysqlnd php80-php-pdo php80-php-opcache php80-p  0.0s
 => CACHED [4/5] RUN ln -sf /opt/remi/php80/root/usr/bin/php* /usr/local/bin                                                                                                                                   0.0s
 => [5/5] RUN ln -s /usr/lib/systemd/system/php80-php-fpm.service /etc/systemd/system/multi-user.target.wants/php80-php-fpm.service                                                                            0.3s
 => exporting to image                                                                                                                                                                                         0.0s
 => => exporting layers                                                                                                                                                                                        0.0s
 => => writing image sha256:df46ab6f91c2b8774e76a01686e111633fba615f10fc7c9900ab1b969e1a5d16                                                                                                                   0.0s
 => => naming to docker.io/library/php80:1.0                                                                                                                                                                   0.0s

3.5.4.创建一个容器
[root@localhost php]# docker run -itd --name php8 --privileged=true php80:1.0 /usr/sbin/init
6851d8f92ef490c94eb23a44c1a69e2ae4a665ffadd638daa631745c167d659c
[root@localhost php]# docker ps
CONTAINER ID   IMAGE       COMMAND            CREATED         STATUS         PORTS      NAMES
6851d8f92ef4   php80:1.0   "/usr/sbin/init"   2 seconds ago   Up 2 seconds   9000/tcp   php8
[root@localhost php]# docker exec -it php8 systemctl status php80-php-fpm
● php80-php-fpm.service - The PHP FastCGI Process Manager
   Loaded: loaded (/usr/lib/systemd/system/php80-php-fpm.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2023-08-24 07:45:29 UTC; 25s ago
 Main PID: 54 (php-fpm)
   Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec"
   CGroup: /docker/6851d8f92ef490c94eb23a44c1a69e2ae4a665ffadd638daa631745c167d659c/system.slice/php80-php-fpm.service
           ├─54 php-fpm: master process (/etc/opt/remi/php80/php-fpm.conf)
           ├─60 php-fpm: pool www
           ├─61 php-fpm: pool www
           ├─62 php-fpm: pool www
           ├─63 php-fpm: pool www
           └─64 php-fpm: pool www
           ‣ 54 php-fpm: master process (/etc/opt/remi/php80/php-fpm.conf)

Aug 24 07:45:29 6851d8f92ef4 systemd[1]: Starting The PHP FastCGI Process Manager...
Aug 24 07:45:29 6851d8f92ef4 systemd[1]: Started The PHP FastCGI Process Manager.

3.6.构建一个基于rpm安装的nginx镜像

3.6.1.创建目录及所需文件
[root@localhost ~]# mkdir nginx
[root@localhost nginx]# touch 111 > index.html

3.6.2.编写Dockfile文件
[root@localhost nginx]# vim Dockerfie
FROM centos:centos7.9.2009

MAINTAINER zxw<zxw@xxjsjl.cn>

VOLUME ["nginx_1","nginx_2"]

RUN yum install -y wget
RUN wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

RUN yum install -y nginx
RUN echo "daemon off;" >> /etc/nginx/nginx.conf

EXPOSE 80 443
CMD ["/usr/sbin/nginx"]

3.6.3.构建镜像
[root@localhost nginx]# docker build -t mynginx .
[+] Building 26.8s (11/11) FINISHED              docker:default
 => [internal] load build definition from Dockerfile           0.0s
 => => transferring dockerfile: 428B                           0.0s
 => [internal] load .dockerignore                              0.0s
 => => transferring context: 2B                                0.0s
 => [internal] load metadata for docker.io/library/centos:centos7.9.2009            0.0s
 => CACHED [1/6] FROM docker.io/library/centos:centos7.9.2009                        0.0s
 => [internal] load build context                               0.0s
 => => transferring context: 101B                               0.0s
 => [2/6] RUN yum install -y wget                                10.9s
 => [3/6] RUN wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo             0.3s
 => [4/6] RUN yum install -y nginx                               14.1s
 => [5/6] RUN echo "daemon off;" >> /etc/nginx/nginx.conf        0.3s
 => [6/6] ADD index.html /usr/share/nginx/html/index.html         0.0s
 => exporting to image                                            1.0s
 => => exporting layers                                            1.0s
 => => writing image sha256:41c69e2c47dba70d1dbb89a1929f117fd3b680ee17a79cb15878e48ed51b1346             0.0s
 => => naming to docker.io/library/mynginx                          0.0s

3.6.4.运行一个容器测试访问
[root@localhost nginx]# docker run -itd --name nginx -p 80:80 mynginx
[root@localhost nginx]# docker exec -it nginx nginx -v
nginx version: nginx/1.20.1

4.基于源码包构建myslq、php、nginx、tomcat等镜像

4.1.基于源码包构建nginx镜像

4.1.1.编写Dockerfile文件
[root@localhost ~]# mkdir nginx
[root@localhost nginx]# vim Dockerfile
##基础镜像来源
FROM centos:7
##编者信息  
MAINTAINER zxw<zxw@xxjsjl.cn>
##安装wget工具和下载阿里云yum源
RUN yum install wget -y 
RUN wget http://mirrors.aliyun.com/repo/Centos-7.repo -O /etc/yum.repos.d/Centos-7.repo  
##安装编译nginx所需要的依赖以及mack工具
RUN yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel && yum install -y pcre-devel libxslt-devel gd-devel GeoIP GeoIP-devel GeoIP-data
RUN yum install -y make
##下载nginx源码包至指定目录并解压以及创建nginx启动用户
ENV NG_VER=nginx-1.24.0
WORKDIR /user/local/src
RUN wget http://nginx.org/download/$NG_VER.tar.gz && tar xzvf $NG_VER.tar.gz
RUN useradd -M -s /sbin/nologin nginx
##进入nginx解压后的目录进行编译(参数)和安装
WORKDIR /user/local/src/$NG_VER
RUN ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-file-aio --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_image_filter_module --with-http_geoip_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_stub_status_module && make && make install
##/usr/local/nginx/sbin 被添加到 PATH 中,意味着系统可以在该路径中找到并执行 nginx 命令
ENV PATH /usr/local/nginx/sbin:$PATH
##暴露端口
EXPOSE 80 443
##启动nginx
ENTRYPOINT ["nginx"]
##告诉容器在启动时以前台方式运行 Nginx,并执行
CMD ["-g","daemon off;"]

4.1.2.构建镜像
[root@localhost nginx]# docker build -t nginx1.24.0:0.1 .
[+] Building 33.9s (14/14) FINISHED                                                                                                                         docker:default
 => [internal] load build definition from Dockerfile                                                                                                                  0.0s
 => => transferring dockerfile: 1.31kB                                                                                                                                0.0s
 => [internal] load .dockerignore                                                                                                                                     0.0s
 => => transferring context: 2B                                                                                                                                       0.0s
 => [internal] load metadata for docker.io/library/centos:7                                                                                                           0.0s
 => [ 1/10] FROM docker.io/library/centos:7                                                                                                                           0.0s
 => CACHED [ 2/10] RUN yum install wget -y                                                                                                                            0.0s
 => CACHED [ 3/10] RUN wget http://mirrors.aliyun.com/repo/Centos-7.repo -O /etc/yum.repos.d/Centos-7.repo                                                            0.0s
 => CACHED [ 4/10] RUN yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel && yum install -y pcre-devel libxslt-devel gd-devel GeoIP GeoIP-devel Ge  0.0s
 => CACHED [ 5/10] RUN yum install -y make                                                                                                                            0.0s
 => CACHED [ 6/10] WORKDIR /user/local/src                                                                                                                            0.0s
 => [ 7/10] RUN wget http://nginx.org/download/nginx-1.24.0.tar.gz && tar xzvf nginx-1.24.0.tar.gz                                                                    2.4s
 => [ 8/10] RUN useradd -M -s /sbin/nologin nginx                                                                                                                     0.4s 
 => [ 9/10] WORKDIR /user/local/src/nginx-1.24.0                                                                                                                      0.0s 
 => [10/10] RUN ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-file-aio --with-http_ssl_module --with-http_realip_module --with-http_addit  28.6s 
 => exporting to image                                                                                                                                                2.3s 
 => => exporting layers                                                                                                                                               2.3s 
 => => writing image sha256:516d3a979c77ff748964df10db5f1b850cd6b9927fa4286fdce19882040690aa                                                                          0.0s 
 => => naming to docker.io/library/nginx1.24.0:0.1                                                                                                                    0.0s 
 
[root@localhost nginx]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
nginx1.24.0   0.1       516d3a979c77   3 minutes ago   1.08GB

4.1.3.启动容器测试
[root@localhost nginx]# docker run -itd -p 80:80 --name nginx nginx1.24.0:0.1 
f3be054228501f568ccef647d262b1d67dcb1fec75d62236d05614346a74ca8e
[root@localhost nginx]# docker ps
CONTAINER ID   IMAGE             COMMAND                  CREATED          STATUS          PORTS                                        NAMES
f3be05422850   nginx1.24.0:0.1   "nginx -g 'daemon of…"   2 seconds ago    Up 1 second     0.0.0.0:80->80/tcp, :::80->80/tcp, 443/tcp   nginx

4.2.基于源码包构建php8.0镜像

提前准备源码包:oniguruma-6.9.4.tar.gz、php-8.0.0.tar.gz

[root@localhost php]# ls
Centos-8.repo  Dockerfile  oniguruma-6.9.4.tar.gz  php-8.0.0.tar.gz

4.2.1.编写Dockerfile文件
[root@localhost php]#vim Dockerfile
#this docker file
#VERSION 1

FROM centos:latest
MAINTAINER  zxw@xxjsjl.cn
## 清除yum源
RUN rm -rf /etc/yum.repos.d/*
 Centos-8.repo /etc/yum.repos.d/Centos-8.repo
RUN yum install -y wget && yum install -y make
RUN wget http://mirrors.aliyun.com/repo/epel-archive-8.repo -O /etc/yum.repos.d/epel-archive-8.repo
RUN yum install -y epel-release

##安装编译oniguruma的依赖、配置编译安装oniguruma
RUN yum install autoconf automake libtool -y
ADD oniguruma-6.9.4.tar.gz /usr/local/src/
WORKDIR /usr/local/src/oniguruma-6.9.4
RUN ./autogen.sh && ./configure --prefix=/usr
RUN make && make install

##安装编译安装php8.0的依赖
RUN yum -y install gcc gcc-c++ libxml2-devel \
openssl-devel curl-devel libjpeg-devel libpng-devel \
libicu-devel freetype-devel openldap-devel openldap \
openldap-devel libxml2-devel openssl openssl-devel \
sqlite-devel libcurl-devel.x86_64 libpng.x86_64 \
libpng-devel.x86_64 freetype-devel libicu-devel.x86_64 \
glibc-headers libzip-devel

##安装编译php8.0以及相关模块
ADD php-8.0.0.tar.gz /usr/local/src
WORKDIR /usr/local/src/php-8.0.0
RUN ./configure \
     --prefix=/usr/local/php \
     --with-config-file-path=/usr/local/php/etc  \
     --with-mysqli=shared,mysqlnd  \
     --with-pdo-mysql  \
     --enable-opcache  \
     --enable-gd  \
     --with-iconv   \
     --with-zip  \
     --enable-inline-optimization  \
     --disable-debug  \
     --disable-rpath  \
     --enable-shared  \
     --enable-xml  \
     --enable-bcmath  \
     --enable-shmop  \
     --enable-sysvsem  \
     --enable-mbregex  \
     --enable-mbstring  \
     --enable-ftp  \
     --enable-pcntl  \
     --enable-sockets  \
     --with-xmlrpc  \
     --enable-soap  \
     --without-pear  \
     --with-gettext  \
     --enable-session  \
     --with-curl  \
     --with-jpeg  \
     --with-freetype  \
     --enable-fpm  \
     --with-fpm-user=nginx  \
     --with-fpm-group=nginx  \
     --without-gdbm  \
     --enable-fast-install  \
     --disable-fileinfo
RUN make && make install

## 创建php启动用户
RUN groupadd nginx && useradd -g nginx -s /sbin/nologin -M nginx
## 配置php解析器
RUN cp php.ini-production /usr/local/php/etc/php.ini
## 配置php进程管理器文件
RUN cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
## 配置PHP-FPM的一个配置文件,用于配置PHP-FPM进程池中的单个进程管理器
RUN cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
## 将 PHP-FPM 的启动脚本拷贝到系统的启动目录,以便在系统启动时自动启动 PHP-FPM
RUN cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm
## 通过设置权限为 744
RUN chmod 744 /etc/rc.d/init.d/php-fpm
## 命令 “/etc/init.d/php-fpm start” 用于启动 PHP-FPM 服务
RUN /etc/init.d/php-fpm start
## 将 PHP-FPM 添加到系统的服务管理器中。该命令会在系统的服务配置目录中创建一个启动配置文件,以便在系统启动时自动启动 PHP-FPM 服务。
RUN chkconfig --add php-fpm
## 将 PHP-FPM 服务设置为开机自启动。执行这个命令后,系统会将 PHP-FPM 服务添加到开机自启动的服务列表中,并在每次系统启动时自动启动该服务。
RUN chkconfig php-fpm on
## 将指定的路径添加到系统的环境变量中
RUN echo "PATH=/usr/local/php/bin:/usr/local/php/lib:\$PATH" >>/etc/profile
## 用于将 “export PATH” 添加到系统的环境变量配置文件 “/etc/profile” 中。使用 “export PATH” 声明,确保环境变量 PATH 在当前环境中可用。添加这个声明后,系统将以指定的路径为基准来搜索可执行文件,从而使得系统可以在终端中运行你所添加的可执行文件。
RUN echo  "export PATH" >>/etc/profile

RUN rm -rf /usr/local/src/*
WORKDIR /usr/local/php
EXPOSE 9000

## 用于手动启动 PHP-FPM 的命令
RUN /usr/local/php/sbin/php-fpm
CMD ["/usr/sbin/init"]

4.2.2.构建镜像
[root@localhost php]# docker build -t php80:1.0 .

4.2.3.启动容器测试服务运行情况
[root@localhost php]# docker run -itd --name php2 --privileged=true php80:1.0 /usr/sbin/init
789a5c964eb172e2840e3bcb11afbb9c5da10f60c34b12a4d7572ea5b8e9979e
[root@localhost php]# docker ps
CONTAINER ID   IMAGE           COMMAND            CREATED          STATUS         PORTS      NAMES
789a5c964eb1   php80:1.0       "/usr/sbin/init"   2 seconds ago    Up 1 second    9000/tcp   php2
bb658bf094a3   centos:latest   "/bin/bash"        33 minutes ago   Up 3 minutes              centos
[root@localhost php]# docker exec -it php2 ps -ef
UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  1 09:55 ?        00:00:00 /usr/sbin/init
root          31       1  1 09:55 ?        00:00:00 /usr/lib/systemd/systemd-journald
root          35       1  4 09:55 ?        00:00:00 /usr/lib/systemd/systemd-udevd
dbus          59       1  0 09:55 ?        00:00:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
root          63       1  0 09:55 ?        00:00:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
nginx         64      63  0 09:55 ?        00:00:00 php-fpm: pool www
nginx         65      63  0 09:55 ?        00:00:00 php-fpm: pool www
root         155       0  0 09:55 pts/1    00:00:00 ps -ef

4.3.基于源码包构建mysql8.0.33镜像

提前准备相应文件

4.3.1.编写dockerfile文件
[root@localhost]# mkdir mysql
[root@localhost mysql]#ls
boost_1_77_0.tar.bz2   cmake-3.9.2.tar.gz   Dockerfile  mysql-boost-8.0.33.tar.gz
[root@localhost mysql]#vim Dockerfile
FROM centos:7
MAINTAINER  zxw@xxjsjl.cn
## Centos_Os_Version=CentOS Linux release 7.9.2009 (Core)
## 配置yum及导入相关文件
RUN rm -rf /etc/yum.repos.d/*
ADD cmake-3.9.2.tar.gz /usr/local/src/
ADD mysql-boost-8.0.33.tar.gz /usr/local/src
 boost_1_77_0.tar.bz2 /usr/local/src/boost/boost_1_77_0.tar.bz2
 installed_packages.txt /root/installed_packages.txt
 Centos-7.repo /etc/yum.repos.d/Centos-7.repo
 epel-7.repo /etc/yum.repos.d/epel-7.repo
## 安装依赖
RUN yum install -y $(cat installed_packages.txt) devtoolset-11-gcc devtoolset-11-gcc-c++ devtoolset-11-binutils
## 编译安装cmake-3.9.2
WORKDIR /usr/local/src/cmake-3.9.2
RUN ./configure
RUN make && make install
RUN ln -s /usr/local/bin/cmake /usr/bin/
## 编译及安装mysql-8.0.33
WORKDIR /usr/local/src/mysql-8.0.33
RUN cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql/ \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DMYSQL_DATADIR=/usr/local/mysql/data/ \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DWITH_INNODB_MEMCACHED=1 \
-DWITH_DEBUG=OFF \00
-DWITH_ZLIB=bundled \
-DENABLED_LOCAL_INFILE=1 \
-DENABLED_PROFILING=ON \
-DMYSQL_MAINTAINER_MODE=OFF \
-DMYSQL_TCP_PORT=3306 \
-DFORCE_INSOURCE_BUILD=1 \
-WITH_BOOST=/usr/local/src/boost/
RUN make -j 4 && make install
## 配置mysql启动用户及设置权限
RUN groupadd mysql && useradd -g mysql -s /sbin/nologin -M mysql
RUN mkdir /usr/local/mysql/data/
RUN chown -R mysql.mysql /usr/local/mysql
RUN chown -R mysql.mysql /usr/local/mysql/data
## 配置my.cnf文件
RUN echo "[mysqld]" >/etc/my.cnf
RUN echo "bind-address=0.0.0.0" >>/etc/my.cnf
RUN echo "port=3306" >>/etc/my.cnf
RUN echo "basedir=/usr/local/mysql" >>/etc/my.cnf
RUN echo "datadir=/usr/local/mysql/data" >>/etc/my.cnf
RUN echo "default-authentication-plugin=mysql_native_password" >>/etc/my.cnf
RUN echo "character-set-server=utf8mb4" >>/etc/my.cnf
RUN echo "collation-server=utf8mb4_0900_ai_ci" >>/etc/my.cnf
## # 初始化数据库
RUN /usr/local/mysql/bin/mysqld  --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
## 复制启动文件及设置开机启动
RUN cp support-files/mysql.server /etc/rc.d/init.d/mysqld
RUN chkconfig mysqld on
## 添加环境变量
RUN echo "PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH" >>/etc/profile
RUN echo "export PATH" >>/etc/profile
RUN source /etc/profile
## 添加环境变量
RUN service mysqld start 

CMD ["/usr/sbin/init"]::

6、发布镜像DockerHub或阿里云

6.1.把镜像发布到DockerHub

6.1.1.DockerHub地址,注册一个账号

https://hub.docker.com/

6.2.2.登录自己的DockerHub

[root@localhost ~]# docker login -u  [账号]
Password:
https://docs.docker.com/engine/reference/commandline/login#credentials-store

Login Succeeded

6.2.3.提交自己的镜像

[root@localhost ~]# docker push [作者名字]/[镜像名称]:[版本号]

#push镜像有问题?增加tag标签。

[root@localhost ~]# docker tag [作者名字]/[镜像名称]:[版本号]

6.2.把镜像发布到阿里云镜像服务

6.2.1.登录到阿里云

6.2.2.找到容器镜像服务并设置

(1)创建命名空间

(2)创建镜像仓库

(3)相关页面信息

#基础信息

#发布操作

6.2.3.将本地镜像发布至阿里云仓库

(1)登录到阿里云仓库

[root@localhost ~]# docker login --username=起风了4606 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@localhost ~]#

(2)生成镜像tag并push

#生成tag

[root@localhost ~]# docker tag 209d8c830416 registry.cn-hangzhou.aliyuncs.com/local_zxw_0616/mytomcat:0.1

#push镜像

[root@localhost ~]# docker push registry.cn-hangzhou.aliyuncs.com/local_zxw_0616/mytomcat:0.1
The push refers to repository [registry.cn-hangzhou.aliyuncs.com/local_zxw_0616/mytomcat]
5f70bf18a086: Pushed
66d32dae2002: Pushed
09aa69d518ed: Pushed
3eb0769d6105: Pushed
3e459d597ee0: Pushed
93157c47d58e: Pushed
74ddd0ec08fa: Pushed
0.1: digest: sha256:3af1281eccdab7e1ff8039712cb97465e9b55cb5dd0b6de1eec943c65a9bc4f1 size: 1787

0
广告 广告

评论区