docker-dockerfile-docker镜像制作-基于现有镜像制作(以tomcat镜像为例)

1.镜像制作

一般会有三种方式制作镜像
基于已有镜像创建
基于本地模板创建
基于Dockerfile创建(重点)

如果有多个RUN,自上而下依次运行,每次运行都会形成新的层,建议&& 放入一行运行
如果有多个CMD,只有最后一个运行
如果有多个Entrypoint,只有最后一个运行
如果CMD和entrypoint共存,只有entrypoint运行,且最后的CMD会当做entrypoint的参数

镜像制作分为两个阶段

1、docker build阶段 基于dockerfile制作镜像 (RUN,用于此阶段的运行命令)
2、docker run阶段 基于镜像运行容器 (CMD,基于image run容器时候,需要运行的命令)
3、docker build 基于第一阶段的镜像被别人from制作新镜像 (entrypoint 或onbuild 基于镜像重新构建新镜像时候在此阶段运行的命令)

2 基于现有镜像制作

2.1 docker拉取tomcat镜像

[root@VM-4-13-centos ~]# docker pull tomcat
Using default tag: latest
latest: Pulling from library/tomcat
44ba2882f8eb: Pull complete 
2cabec57fa36: Pull complete 
c4e554d59e12: Pull complete 
111cbdbeed15: Pull complete 
ebe3e1fbfc69: Pull complete 
dfa1fc9cfd4d: Pull complete 
33eb4f163d71: Pull complete 
064a77b1040e: Pull complete 
Digest: sha256:a215a8c356af7ff323595018bd1fb97a4893d49ae8f53746a969ba57a8534846
Status: Downloaded newer image for tomcat:latest

2.2 docker 查看拉取的tomcat镜像

[root@VM-4-13-centos ~]# docker images
REPOSITORY                      TAG                 IMAGE ID            CREATED             SIZE
tomcat                          latest              d0ed0a728666        2 weeks ago         426MB

2.3 创建容器,并启动容器

[root@VM-4-13-centos ~]# docker run -d --name tomcat01 -p 7777:8080 tomcat:latest
c72326a55ea9e2a967703676097565705bccfbf0b0ccb1cb2e91c35243a49cac

查看容器发现并没有正常运行 (docker ps);查看docker log 容器id,看报什么错。

[root@VM-4-13-centos ~]# docker logs c72326a55ea9
Cannot find /usr/local/tomcat/bin/setclasspath.sh
This file is needed to run this program

此处报错是因为容器内的root只是外部的一个普通用户权限,加上--privileged这个参数才让你容器内的root用户具备拥有真正的root权限。

2.4 删除容器,重新创建容器

[root@VM-4-13-centos ~]# docker rm c72326a55ea9
c72326a55ea9
[root@VM-4-13-centos ~]# docker run -d --privileged --name tomcat01 -p 7777:8080 tomcat:latest
d133d4773f56b92910bfc8d9be6eaef4d1d9b8df5fdc3a5f1865189f8975caaa
[root@VM-4-13-centos ~]# docker ps
CONTAINER ID        IMAGE                                COMMAND                  CREATED             STATUS                 PORTS                       NAMES
d133d4773f56        tomcat:latest                        "catalina.sh run"        4 seconds ago       Up 2 seconds           0.0.0.0:7777->8080/tcp      tomcat01

[root@VM-4-13-centos ~]# ps -ef|grep 7777
root 22194 16618 0 15:32 ? 00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 7777 -container-ip 172.17.0.3 -container-port 8080
root 24424 5052 0 15:33 pts/0 00:00:00 grep --color=auto 7777

2.5 进入容器,查看tomcat路径,方便从宿主机上传文件到容器内。并在tomcat/webapps 目录下创建login目录。

[root@VM-4-13-centos docker]# docker exec -it d133d4773f56 /bin/bash
root@d133d4773f56:/usr/local/tomcat# pwd
/usr/local/tomcat
root@d133d4773f56:/usr/local/tomcat# ls
bin  BUILDING.txt  conf  CONTRIBUTING.md  lib  LICENSE  logs  native-jni-lib  NOTICE  README.md  RELEASE-NOTES  RUNNING.txt  temp  webapps  webapps.dist  work
root@d133d4773f56:/usr/local/tomcat# cd webapps
root@d133d4773f56:/usr/local/tomcat/webapps# mkdir login

2.6 exit 退出容器,在当前目录,上传登录页面相关文件到容器内 /usr/local/tomcat/webapps/login

[root@VM-4-13-centos docker]# docker cp 1.jpg d133d4773f56:/usr/local/tomcat/webapps/login
[root@VM-4-13-centos docker]# docker cp login.html d133d4773f56:/usr/local/tomcat/webapps/login
[root@VM-4-13-centos docker]# docker cp style.css d133d4773f56:/usr/local/tomcat/webapps/login
[root@VM-4-13-centos docker]# docker cp user.png d133d4773f56:/usr/local/tomcat/webapps/login

2.7 访问页面登录成功。访问地址: IP:7777/login/login.html

2.8 将容器提交成新的镜像

[root@VM-4-13-centos docker]#  docker commit -m "login html" -a "liangbosheng" d133d4773f56 tomcat:666
sha256:2ccf979cb7a22953f70bb5eec6a79fdeba541988238f714161bf121db84d99cb

2.9 将新容器下载到本地

[root@VM-4-13-centos docker]# docker save tomcat:666 -o /home/docker/login.tar.gz

2.10 停止容器运行,删除容器,删除镜像

[root@VM-4-13-centos docker]# docker stop d133d4773f56
[root@VM-4-13-centos docker]# docker rm d133d4773f56 
d133d4773f56
[root@VM-4-13-centos docker]# docker rmi 2ccf979cb7a2

2.10 docker 加载刚才下载的镜像

[root@VM-4-13-centos docker]# docker load < /home/docker/login.tar.gz 
dc0585a4b8b7: Loading layer [==================================================>]  80.35MB/80.35MB
ecec36d8cc35: Loading layer [==================================================>]  52.58MB/52.58MB
b3fa8c246901: Loading layer [==================================================>]  279.3MB/279.3MB
2753bf99b948: Loading layer [==================================================>]  3.072kB/3.072kB
ca89f0b54994: Loading layer [==================================================>]  3.072kB/3.072kB
2e65c99e8925: Loading layer [==================================================>]  3.072kB/3.072kB
1179ae616577: Loading layer [==================================================>]  19.35MB/19.35MB
92a7a3b302dd: Loading layer [==================================================>]  2.048kB/2.048kB
7b38495c99f2: Loading layer [==================================================>]  2.374MB/2.374MB
Loaded image: tomcat:666

2.11 创建容器,并启动

[root@VM-4-13-centos docker]# docker run -d --privileged --name tomcat01 -p 7777:8080 tomcat:666
df0ee5083e16c9849c7562f6ee7526055911579308c85824f35512e500bc6cb6

重复2.7 ,访问正常。

 

posted @ 2023-09-19 16:50  家乐福的搬砖日常  阅读(294)  评论(0编辑  收藏  举报