文档章节

编写Dockerfile构建你自己的镜像

laiconglin
 laiconglin
发布于 2017/08/26 23:23
字数 787
阅读 50
收藏 0

1. 编写第一个Dockerfile

mkdir mynginx && cd mynginx
touch Dockerfile

Dockerfile中的内容为:

FROM nginx
RUN echo '<h1>Hello Docker!</h1>' > /usr/share/nginx/html/index.html

2. 构建docker镜像

docker build -t nginx:v3 .

执行结果的截图:

[root@localhost mynginx]# docker build -t nginx:v3 .
Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM nginx
latest: Pulling from library/nginx
94ed0c431eb5: Pull complete 
9406c100a1c3: Pull complete 
aa74daafd50c: Pull complete 
Digest: sha256:788fa27763db6d69ad3444e8ba72f947df9e7e163bad7c1f5614f8fd27a311c3
Status: Downloaded newer image for nginx:latest
 ---> b8efb18f159b
Step 2/2 : RUN echo '<h1>Hello Docker!</h1>' > /usr/share/nginx/html/index.html
 ---> Running in a3e91bf5741d
 ---> d19100668ad5
Removing intermediate container a3e91bf5741d
Successfully built d19100668ad5
Successfully tagged nginx:v3
[root@localhost mynginx]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               v3                  d19100668ad5        52 seconds ago      107MB
nginx               latest              b8efb18f159b        4 weeks ago         107MB
registry            latest              751f286bc25e        5 weeks ago         33.2MB
hello-world         latest              1815c82652c0        2 months ago        1.84kB
[root@localhost mynginx]#

3. 运行新版docker镜像

docker run --name webserver -d -p 80:80 nginx:v3

测试查看是否运行成功:

[root@localhost mynginx]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
5f0182292a1a        nginx:v3            "nginx -g 'daemon ..."   18 minutes ago      Up 18 minutes       0.0.0.0:80->80/tcp   webserver
[root@localhost mynginx]# curl "http://127.0.0.1"
<h1>Hello Docker!</h1>
[root@localhost mynginx]# 

4. 停止和开始该镜像

停止该容器

docker stop webserver

开始该容器

docker start webserver

重启该容器

docker restart webserver

5. 重新构建所有的脚本

docker stop webserver
docker rm webserver
docker rmi $(docker images -q nginx:v3)
docker build -t nginx:v3 .
docker run --name webserver -d -p 80:80 nginx:v3

6. 增加健康检查

这个时候的Dockerfile变成了:

FROM nginx
ENV VERSION=1.0
COPY ./sources.list /tmp/sources.list
RUN mv /tmp/sources.list /etc/apt/sources.list && apt-get update \
        && apt-get install -y --allow-unauthenticated curl \
        && rm -rf /var/lib/apt/lists/* \
        && echo '<h1>Hello Docker!</h1>' > /usr/share/nginx/html/index.html
COPY ./test.html /usr/share/nginx/html/test.html
HEALTHCHECK --interval=5s --timeout=3s \
    CMD curl -fs http://localhost/ || exit 1

其中的sources.list的内容为:

# deb cdrom:[Ubuntu 16.04 LTS _Xenial Xerus_ - Release amd64 (20160420.1)]/ xenial main restricted
deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-properties
deb http://archive.canonical.com/ubuntu xenial partner
deb-src http://archive.canonical.com/ubuntu xenial partner
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse

采用docker ps可以看到该状态了

[root@localhost mynginx]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                   PORTS                NAMES
412feea16569        nginx:v3            "nginx -g 'daemon ..."   5 minutes ago       Up 5 minutes (healthy)   0.0.0.0:80->80/tcp   webserver
[root@localhost mynginx]# 

采用docker inspect来查看消息

[root@localhost mynginx]# docker inspect --format '{{json .State.Health}}' webserver | python -m json.tool
{
    "FailingStreak": 0,
    "Log": [
        {
            "End": "2017-08-27T16:14:52.557653397+08:00",
            "ExitCode": 0,
            "Output": "<h1>Hello Docker!</h1>\n",
            "Start": "2017-08-27T16:14:52.418027597+08:00"
        }
    ],
    "Status": "healthy"
}
[root@localhost mynginx]# 

7. 打包和导入

打包保存镜像 【docker save nginx:v3 | gzip > nginx_v3.tar.gz】

[root@localhost mynginx]# docker save nginx:v3 | gzip > nginx_v3.tar.gz
[root@localhost mynginx]# ls
Dockerfile  nginx_v3.tar.gz  rebuild_all.sh  sources.list  test.html
[root@localhost mynginx]# 

导入镜像【docker load -i nginx_v3.tar.gz】

[root@localhost mynginx]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              b8efb18f159b        4 weeks ago         107MB
hello-world         latest              1815c82652c0        2 months ago        1.84kB
[root@localhost mynginx]# docker load -i nginx_v3.tar.gz 
539ad9b5c133: Loading layer [==================================================>]  3.584kB/3.584kB
8a4c074a807e: Loading layer [==================================================>]   17.3MB/17.3MB
ebd1081b38e1: Loading layer [==================================================>]  4.096kB/4.096kB
Loaded image: nginx:v3
[root@localhost mynginx]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               v3                  9d6d322db4f2        16 minutes ago      124MB
nginx               latest              b8efb18f159b        4 weeks ago         107MB
hello-world         latest              1815c82652c0        2 months ago        1.84kB
[root@localhost mynginx]# 

 

© 著作权归作者所有

laiconglin
粉丝 8
博文 35
码字总数 15315
作品 0
武汉
程序员
私信 提问
九步构建自己的hello world Docker镜像

构建 Docker 镜像 Docker镜像构建是通过 Dockerfile来构建的,里面运行的程序是可以自定的,从编写程序到安装Docker镜像,可以一气呵成。接下来我们就通过九步实现一个自定义的镜像的制作、构...

上官瑾文
2018/04/17
0
0
Docker学习记录(2)——JAVA应用容器化(JAVA博客应用Solo)

以GitHub上一个开源JAVA博客应用为例,地址为:https://github.com/b3log/solo。它的项目结构是基于Maven的要求布置的,通过Maven可以编译和构建WAR包。 执行容器化的环境为CentOS7.2。 安装...

huqigang
2017/09/12
0
0
六、Containerizing an app

containerizing,有时也叫Dockerizing,is the process of taking an application and configuring it to run as a container. 容器通常是关于apps,特别是,它们使得app的构建、传送(将ima...

倪伟伟
06/15
19
0
docker入门+结合微服务实战(七)

如在文档中遇到什么问题请联系作者 QQ:1172796094 本人正在找深圳Java实习工作,求大佬带飞 —————————————————————————————————————— 构建镜像 前面...

Java小表弟
2018/12/10
0
0
Docker实践:python应用容器化

一、前言   容器使用沙箱机制,互相隔离,优势在于让各个部署在容器的里的应用互不影响,独立运行,提供更高的安全性。本文主要介绍python应用(django)跑在docker容器里,编写dockerfil...

三只松鼠
2018/08/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Mybatis Plus删除

/** @author beth @data 2019-10-17 00:30 */ @RunWith(SpringRunner.class) @SpringBootTest public class DeleteTest { @Autowired private UserInfoMapper userInfoMapper; /** 根据id删除......

一个yuanbeth
今天
4
0
总结

一、设计模式 简单工厂:一个简单而且比较杂的工厂,可以创建任何对象给你 复杂工厂:先创建一种基础类型的工厂接口,然后各自集成实现这个接口,但是每个工厂都是这个基础类的扩展分类,spr...

BobwithB
今天
5
0
java内存模型

前言 Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文我们要讨论的JVM内存结构、Java内存模...

ls_cherish
今天
4
0
友元函数强制转换

友元函数强制转换 p522

天王盖地虎626
昨天
5
0
js中实现页面跳转(返回前一页、后一页)

本文转载于:专业的前端网站➸js中实现页面跳转(返回前一页、后一页) 一:JS 重载页面,本地刷新,返回上一页 复制代码代码如下: <a href="javascript:history.go(-1)">返回上一页</a> <a h...

前端老手
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部