Dokcer构建镜像以及发布镜像

常见指令

FROM			# 基础镜像,从此开始构建
MAINTAINER		# 镜像作者,通常为姓名+邮箱
RUN				# 镜像构建时需要执行的命令
ADD				# 在镜像中需要添加的文件(比如基础镜像centos中要添加tomcat)
WORKDIR			# 镜像的工作目录
VOLUME			# 容器数据卷,挂载主机的目录
EXPOSE			# 对外的暴露端口
CMD				# 指定容器启动时要运行的命令(只有最后一个生效,可被替代)
ENTRYPOINT		# 指定容器启动时要运行的命令(可以追加命令)
ONBUILD			# 当构建一个被继承DockerFile时就会运行ONBUILD指令	
COPY			# 类似ADD,将文件拷贝到镜像中
ENV				# 构建时的环境变量

构建自己的CentOS

  1. 编写dockerfile
    基于官网的centos构建自己的centos,编写一个centos-dockerfile
[root@ecs-98457 ~]# cd /home
[root@ecs-98457 home]# ls
docker-test-volume  mysql  test  test.java
[root@ecs-98457 home]# mkdir dockerfile
[root@ecs-98457 home]# cd dockerfile/
[root@ecs-98457 dockerfile]# vim centos-dockerfile
[root@ecs-98457 dockerfile]# cat centos-dockerfile 
FROM centos:7
MAINTAINER cxz<1565976786@qq.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 8088

CMD echo $MYPATH
CMD echo "----end----"
CMD /bin/bash
[root@ecs-98457 dockerfile]# 

由于从2022年1月31日起,CentOS开发团队将会移除官方镜像源上关于CentOS 8所有的包,届时如果在CentOS 8上再次使用yum命令安装包则会报以下错误:
下载元数据失败:Cannot prepare internal mirrorlist: No URLs in mirrorlist
所以我们在构建自己的centos时我们指定版本 不要使用最新的centos去生成自己的版本 不然构建的时候会报以下错误

CentOS Linux 8 - AppStream                       55  B/s |  38  B     00:00    
Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist
The command '/bin/sh -c yum -y install vim' returned a non-zero code: 1
  1. 通过dockerfile构建镜像
[root@ecs-98457 dockerfile]# docker build -f centos-dockerfile -t mycentos:1.0 .

此时我们就构建成功了

Complete!
Removing intermediate container 373fa0d2d62b
 ---> 4d6864b4cf26
Step 7/10 : EXPOSE 8088
 ---> Running in ace7432279aa
Removing intermediate container ace7432279aa
 ---> 8072ccf727ac
Step 8/10 : CMD echo $MYPATH
 ---> Running in 1d20aa3f54ff
Removing intermediate container 1d20aa3f54ff
 ---> 1d68a6018926
Step 9/10 : CMD echo "----end----"
 ---> Running in 1c602eeae2ae
Removing intermediate container 1c602eeae2ae
 ---> a170cf3e4cf1
Step 10/10 : CMD /bin/bash
 ---> Running in 331bb123fc50
Removing intermediate container 331bb123fc50
 ---> 3d4b8ade0459
Successfully built 3d4b8ade0459
Successfully tagged mycentos:1.0

我们可以用docker history命令查看镜像的构建过程

[root@ecs-98457 dockerfile]# docker history 3d4b8ade0459
IMAGE          CREATED         CREATED BY                                      SIZE      COMMENT
3d4b8ade0459   8 minutes ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "/bin…   0B        
a170cf3e4cf1   8 minutes ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B        
1d68a6018926   8 minutes ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B        
8072ccf727ac   8 minutes ago   /bin/sh -c #(nop)  EXPOSE 8088                  0B        
4d6864b4cf26   8 minutes ago   /bin/sh -c yum -y install net-tools             166MB     
81ca0fe0f93a   8 minutes ago   /bin/sh -c yum -y install vim                   221MB     
10d8a87b6077   9 minutes ago   /bin/sh -c #(nop) WORKDIR /usr/local            0B        
50fd685fa166   9 minutes ago   /bin/sh -c #(nop)  ENV MYPATH=/usr/local        0B        
6902fa334194   9 minutes ago   /bin/sh -c #(nop)  MAINTAINER cxz<1565976786…   0B        
eeb6ee3f44bd   6 months ago    /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B        
<missing>      6 months ago    /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B        
<missing>      6 months ago    /bin/sh -c #(nop) ADD file:b3ebbe8bd304723d4…   204MB     
[root@ecs-98457 dockerfile]# 
  1. 通过镜像启动容器
root@ecs-98457 dockerfile]# docker run -it mycentos:1.0
[root@9c17eabd42c5 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 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<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@9c17eabd42c5 local]# vim test.text
[root@9c17eabd42c5 local]# 

对比之前官方的centos,新增了ifconfig、vim等命令
在这里插入图片描述

构建自己的Tomcat

准备Tomcat压缩包,而Tomcat运行需要依赖于jdk,所以还需要jdk的压缩包
tomcat下载地址:https://tomcat.apache.org/download-90.cgi
jdk下载地址:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html

通过FileZilla将压缩包上传到liunx服务器
在这里插入图片描述

[root@ecs-98457 tomcat]# ls
apache-tomcat-9.0.62.tar.gz  jdk-8u321-linux-x64.tar.gz  readme.txt

编写dockerfile文件
编写dockerfile文件,官方命名为Dockerfile,这样就不需要通过-f指定,build时会自动寻找这个文件

[root@ecs-98457 tomcat]# cat Dockerfile 
FROM centos:7

MAINTAINER cxz<1565976786@qq.com>

COPY readme.txt /usr/local/readme.txt

ADD jdk-8u321-linux-x64.tar.gz /usr/local/

ADD apache-tomcat-9.0.62.tar.gz /usr/local/

RUN yum -y install vim

ENV MYPATH /usr/local
WORKDIR $MYPATH

ENV JAVA_HOME /usr/local/jdk1.8.0_321
ENV CALSSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.62
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.62
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080

CMD /usr/local/apache-tomcat-9.0.62/bin/startup.sh && tail -F /url/local/apache-tomcat-9.0.62/bin/logs/catalina.out

ADD jdk-8u321-linux-x64.tar.gz /usr/local/
后面的 /usr/local/ 指定jdk解压到该目录下 运行是会自动解压
ENV JAVA_HOME /usr/local/jdk1.8.0_321
/usr/local/jdk1.8.0_321 为解压后的路径 不要配置错了 不然jdk启动不起来 测试连接是连接不上的

curl: (56) Recv failure: Connection reset by peer

构建镜像

[root@ecs-98457 tomcat]# docker build -t mytomcat .
Sending build context to Docker daemon  158.4MB
Step 1/15 : FROM centos:7
 ---> eeb6ee3f44bd
Step 2/15 : MAINTAINER cxz<1565976786@qq.com>
 ---> Using cache
 ---> 6902fa334194
Step 3/15 : COPY readme.txt /usr/local/readme.txt
 ---> 3013ceeb61f8
Step 4/15 : ADD jdk-8u321-linux-x64.tar.gz /usr/local/
 ---> 26e27156c5be
Step 5/15 : ADD apache-tomcat-9.0.62.tar.gz /usr/local/
 ---> 789531130a1d
Step 6/15 : RUN yum -y install vim
 ---> Running in da1e7e23c4ea
Loaded plugins: fastestmirror, ovl
Determining fastest mirrors
 * base: mirrors.bfsu.edu.cn
 * extras: mirrors.huaweicloud.com
 * updates: mirrors.tuna.tsinghua.edu.cn
Resolving Dependencies
--> Running transaction check

#运行镜像
[root@ecs-98457 tomcat]# docker run -d -p 9090:8080 --name cxztomcat14 -v /home/tomcat/test:/usr/local/apache-tomcat-9.0.62/webapps/test -v /home/tomcat/logs:/usr/local/apache-tomcat-9.0.62/logs mytomcat
c8efaa82a1e94b4a545949fd4a8f1681519d13acf26a71bd919c921a508f8a43
[root@ecs-98457 tomcat]# docker ps
CONTAINER ID   IMAGE      COMMAND                  CREATED          STATUS          PORTS                                       NAMES
c8efaa82a1e9   mytomcat   "/bin/sh -c '/usr/lo…"   3 seconds ago    Up 3 seconds    0.0.0.0:9090->8080/tcp, :::9090->8080/tcp   cxztomcat14
3b8360afe6d5   centos:7   "/bin/bash"              39 minutes ago   Up 39 minutes                                               dreamy_pare
bed5c3e5f6c5   centos     "/bin/bash"              43 minutes ago   Up 43 minutes                                               pensive_galois
774984d47194   nginx      "/docker-entrypoint.…"   51 minutes ago   Up 51 minutes   0.0.0.0:3344->80/tcp, :::3344->80/tcp       nginx01

#测试连接
[root@ecs-98457 tomcat]# curl localhost:9090


<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <title>Apache Tomcat/9.0.62</title>
        <link href="favicon.ico" rel="icon" type="image/x-icon" />
        <link href="tomcat.css" rel="stylesheet" type="text/css" />
    </head>

    <body>
        <div id="wrapper">
            <div id="navigation" class="curved container">
                <span id="nav-home"><a href="https://tomcat.apache.org/">Home</a></span>
                <span id="nav-hosts"><a href="/docs/">Documentation</a></span>
                <span id="nav-config"><a href="/docs/config/">Configuration</a></span>

在这里插入图片描述
发布项目
我们已经做了卷挂载,本机的/home/tomcat/test挂载到容器的/usr/local/apache-tomcat-9.0.41/webapps/test目录,因此我们只需要在本机对应目录项发布项目就会自动同步到容器中

我们在/home/tomcat/test目录下新建WEB-INF目录,在其中创建web.xml文件

[root@ecs-98457 tomcat]# cd test/
[root@ecs-98457 test]# ls
[root@ecs-98457 test]# mkdir WEB-INF
[root@ecs-98457 test]# ls
WEB-INF
[root@ecs-98457 test]# cd WEB-INF/
[root@ecs-98457 WEB-INF]# vim web.xml

[root@ecs-98457 WEB-INF]# cat 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_2_5.xsd"
         version="2.5">

</web-app>

然后在test目录下创建一个index.jsp页面

[root@ecs-98457 test]# cat index.jsp 
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>zsr</title>
</head>
<body>
Hello World!<br/>
<%
out.println("mytomcat测试");
%>
</body>
</html>
[root@ecs-98457 test]# 

然后浏览器输入localhost:9090/test即可看到页面
在这里插入图片描述

发布镜像到 Docker Hub

首先要有自己Docker Hub的账号

  1. 登录 Docker Hub
    docker login命令用于登录
[root@ecs-98457 test]# docker login -u dockerhub账号
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

在push自己的镜像之前 需要使用tag命令在前面加上自己的dockerhub的username 否则会报错

[root@ecs-98457 test]# docker tag 62d0c90bfe7c dockerhub的用户命名/tomcat:1.0
[root@ecs-98457 test]# docker images
REPOSITORY           TAG       IMAGE ID       CREATED        SIZE
dockerhub的用户命名/tomcat   1.0       62d0c90bfe7c   2 hours ago    806MB
cxz/tomcat           1.0       62d0c90bfe7c   2 hours ago    806MB
mytomcat             latest    62d0c90bfe7c   2 hours ago    806MB
mycentos             1.0       3d4b8ade0459   6 hours ago    591MB
nginx                latest    12766a6745ee   10 days ago    142MB
hello-world          latest    feb5d9fea6a5   6 months ago   13.3kB
centos               7         eeb6ee3f44bd   6 months ago   204MB
centos               latest    5d0da3dc9764   6 months ago   231MB

在这里插入图片描述

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

创建阿里云镜像仓库
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

** 登录阿里云Docker Registry**

docker login --username=bareth registry.cn-beijing.aliyuncs.com
登录的用户名为阿里云账号全名,密码为开通服务时设置的密码

[root@ecs-98457 ~]# docker login --username=chenxuezhou registry.cn-beijing.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@ecs-98457 ~]# 

[root@ecs-98457 ~]# docker images
REPOSITORY           TAG       IMAGE ID       CREATED        SIZE
18271904157/tomcat   1.0       62d0c90bfe7c   5 hours ago    806MB
cxz/tomcat           1.0       62d0c90bfe7c   5 hours ago    806MB
mytomcat             latest    62d0c90bfe7c   5 hours ago    806MB
mycentos             1.0       3d4b8ade0459   10 hours ago   591MB
nginx                latest    12766a6745ee   10 days ago    142MB
hello-world          latest    feb5d9fea6a5   6 months ago   13.3kB
centos               7         eeb6ee3f44bd   6 months ago   204MB
centos               latest    5d0da3dc9764   6 months ago   231MB
[root@ecs-98457 ~]# docker tag 62d0c90bfe7c registry.cn-beijing.aliyuncs.com/docker-cxzcxz/docker-test:1.0
[root@ecs-98457 ~]# docker images
REPOSITORY                                                   TAG       IMAGE ID       CREATED        SIZE
18271904157/tomcat                                           1.0       62d0c90bfe7c   6 hours ago    806MB
cxz/tomcat                                                   1.0       62d0c90bfe7c   6 hours ago    806MB
mytomcat                                                     latest    62d0c90bfe7c   6 hours ago    806MB
registry.cn-beijing.aliyuncs.com/docker-cxzcxz/docker-test   1.0       62d0c90bfe7c   6 hours ago    806MB
mycentos                                                     1.0       3d4b8ade0459   10 hours ago   591MB
nginx                                                        latest    12766a6745ee   10 days ago    142MB
hello-world                                                  latest    feb5d9fea6a5   6 months ago   13.3kB
centos                                                       7         eeb6ee3f44bd   6 months ago   204MB
centos                                                       latest    5d0da3dc9764   6 months ago   231MB
#push到阿里云镜像仓库
[root@ecs-98457 ~]# docker pull registry.cn-beijing.aliyuncs.com/docker-cxzcxz/docker-test:1.0

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值