1. 程式人生 > >Docker制作基礎鏡像

Docker制作基礎鏡像

depend dcb byte oar transacti ted bsp creat mman

Docker鏡像制作

方式一:手動運行一個容器,做好所有配置,然後把容器提交成一個鏡像

方式二:使用DockerFile

示例1:做一個yum安裝的nginx鏡像

- 運行並進入一個centos容器:docker run -it --rm 49f7960eb7e4 bash
	- yum install wget -y
	- wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo  # 替換為阿裏的yum源
	- yum install https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm   # 安裝epel源
	- yum install vim pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop -y  # 安裝基礎命令
	- yum install nginx -y  # yum安裝nginx

	- 更改/etc/nginx/nginx.conf,關閉nginx的後臺運行,即增加 daemon off;

	- 自定義主頁
		[root@cee964f73ce4 ~]# cat /usr/share/nginx/html/index.html

		<h1> Yum Nginx 2018-07-09 21:00:00 </h1>

		[root@cee964f73ce4 ~]#


- 把當前容器提交為一個鏡像,指定名稱和版本號
[email protected][20:49:02]$ docker commit -m "nginx-v1" cee964f73ce4 nginx-yum:v1
sha256:84d367dcb28f03a09354051ee6cfe06107068f6890c0e20ded2bf60a87acb9b0
[email protected][20:50:22]$ 
[email protected][20:50:34]$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx-yum           v1                  84d367dcb28f        15 seconds ago      531MB
nginx               latest              3c5a05123222        2 days ago          109MB
ubuntu              latest              113a43faa138        4 weeks ago         81.2MB
centos              latest              49f7960eb7e4        4 weeks ago         200MB
centos              7.2.1511            0a2bad7da9b5        8 months ago        195MB
[email protected][20:50:37]$


- 使用做好的nginx鏡像啟動nginx
[email protected][20:59:12]$ docker run -it --rm -d -p 8080:80 nginx-yum:v1 nginx
c1997e0460ebc155333efd3a616d467f2cc8475200234c773b37daf0c1cf7a68
[email protected][20:59:28]$ 
[email protected][20:59:29]$ 
[email protected][20:59:29]$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                  NAMES
c1997e0460eb        nginx-yum:v1        "nginx"             3 seconds ago       Up 2 seconds        0.0.0.0:8080->80/tcp   naughty_bose
cee964f73ce4        49f7960eb7e4        "bash"              19 minutes ago      Up 19 minutes                              tender_darwin
[email protected][20:59:31]$ 
[email protected][20:59:37]$ ss -tnl 
State      Recv-Q Send-Q                             Local Address:Port                                            Peer Address:Port              
LISTEN     0      128                                            *:22                                                         *:*                  
LISTEN     0      100                                    127.0.0.1:25                                                         *:*                  
LISTEN     0      128                                           :::8080                                                      :::*                  
LISTEN     0      128                                           :::22                                                        :::*                  
LISTEN     0      100                                          ::1:25                                                        :::*                  
[email protected][20:59:39]$ 


註意:如果使用相同的版本號提交鏡像會把之前提交的覆蓋掉!

示例2:編寫DockerFile構建yum安裝的nginx鏡像

[email protected][21:26:59]$ docker images 
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
nginx-yum             v2                  f66b6be1bed7        22 minutes ago      531MB
nginx-yum             v1                  84d367dcb28f        36 minutes ago      531MB
nginx                 latest              3c5a05123222        2 days ago          109MB
ubuntu                latest              113a43faa138        4 weeks ago         81.2MB
centos                latest              49f7960eb7e4        4 weeks ago         200MB
centos                7.2.1511            0a2bad7da9b5        8 months ago        195MB
[email protected][21:27:03]$ 
[email protected][21:23:19]$ pwd
/opt/dockerfile/system/centos/nginx
[email protected][21:21:10]$ wget http://mirrors.aliyun.com/repo/Centos-7.repo
--2018-07-09 21:21:12--  http://mirrors.aliyun.com/repo/Centos-7.repo
Resolving mirrors.aliyun.com (mirrors.aliyun.com)... 121.18.239.215, 121.18.239.213, 121.18.239.211, ...
Connecting to mirrors.aliyun.com (mirrors.aliyun.com)|121.18.239.215|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2523 (2.5K) [application/octet-stream]
Saving to: ‘Centos-7.repo’

100%[==========================================================================================================>] 2,523       --.-K/s   in 0s      

2018-07-09 21:21:12 (194 MB/s) - ‘Centos-7.repo’ saved [2523/2523]

[email protected][21:21:12]$ ll
total 4
-rw-r--r--. 1 root root 2523 Jun 16 06:22 Centos-7.repo
[email protected][21:21:13]$  
[email protected][21:22:55]$ vim Dockerfile 
[email protected][21:23:18]$
[email protected][21:35:47]$ cat Dockerfile 
# Nginx dockerfile 2018-07-09

FROM centos

MAINTAINER standby 71standby@gamil

RUN rm -rf /etc/yum.repos.d/*

ADD Centos-7.repo /etc/yum.repos.d/CentOS-Base.repo

RUN yum install https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm -y

RUN yum install vim pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop -y

RUN yum install nginx -y

[email protected][21:36:20]$

[email protected][21:35:11]$ docker build -t dockerfile-yum-nginx:v2 . 
Sending build context to Docker daemon  6.656kB
Step 1/7 : FROM centos
 ---> 49f7960eb7e4
Step 2/7 : MAINTAINER standby 71standby@gamil
 ---> Using cache
 ---> 9470da6f3f63
Step 3/7 : RUN rm -rf /etc/yum.repos.d/*
 ---> Using cache
 ---> d284b3695812
Step 4/7 : ADD Centos-7.repo /etc/yum.repos.d/CentOS-Base.repo
 ---> Using cache
 ---> c748ad3e145d
Step 5/7 : RUN yum install https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm -y
 ---> Using cache
 ---> 8c91b0da526d
Step 6/7 : RUN yum install vim pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop -y
 ---> Using cache
 ---> 7cebf51fd7b9
Step 7/7 : RUN yum install nginx -y
 ---> Running in 95087cf396ad
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * epel: mirrors.tuna.tsinghua.edu.cn
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
Resolving Dependencies
--> Running transaction check
---> Package nginx.x86_64 1:1.12.2-2.el7 will be installed
...
Complete!
Removing intermediate container 95087cf396ad
 ---> 6d54c875204b
Successfully built 6d54c875204b
Successfully tagged dockerfile-yum-nginx:v2
[email protected][21:35:32]$ 
[email protected][21:36:20]$ docker images
REPOSITORY            TAG                 IMAGE ID            CREATED              SIZE
dockerfile-yum-nginx  v2                  6d54c875204b        About a minute ago   561MB
dockerfile-yum-nginx  v1                  7cebf51fd7b9        10 minutes ago       432MB
nginx-yum             v2                  f66b6be1bed7        32 minutes ago       531MB
nginx-yum             v1                  84d367dcb28f        About an hour ago    531MB
nginx                 latest              3c5a05123222        2 days ago           109MB
ubuntu                latest              113a43faa138        4 weeks ago          81.2MB
centos                latest              49f7960eb7e4        4 weeks ago          200MB
centos                7.2.1511            0a2bad7da9b5        8 months ago         195MB
[email protected][21:37:03]$ 

示例3:編寫DockerFile構建編譯安裝nginx的鏡像  

[email protected][00:35:03]$ pwd
/opt/dockerfile/system/centos/nginx
[email protected][00:35:05]$ ll
total 980
drwxr-xr-x. 2 root root     24 Jul 10 00:01 app
-rw-r--r--. 1 root root   2523 Jun 16 06:22 Centos-7.repo
-rw-r--r--. 1 root root    855 Jul 10 00:13 Dockerfile
-rw-r--r--. 1 root root    664 May 11 11:35 epel-7.repo
-rw-r--r--. 1 root root     56 Jul 10 00:01 index.html
-rw-r--r--. 1 root root 981687 Oct 17  2017 nginx-1.12.2.tar.gz
-rw-r--r--. 1 root root   1026 Jul 10 00:21 nginx.conf
[email protected][00:35:07]$ cat index.html 
<h1>This is index page of nginx running in docker.</h1>
[email protected][00:35:10]$ cat app/index.html 
app index page
[email protected][00:35:12]$ cat nginx.conf 

user nginx nginx;
worker_processes auto;

pid  logs/nginx.pid;

daemon off;

events {
    worker_connections  102400;
    use epoll;
}

http {
    log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘
                      ‘$status $body_bytes_sent "$http_referer" ‘
                      ‘"$http_user_agent" "$http_x_forwarded_for"‘;

    access_log  logs/access.log  main;
    error_log  logs/error.log;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             mime.types;
    default_type        application/octet-stream;


    server {
        listen       80 default_server;
        server_name  _;
        root         /usr/local/nginx/html;

        include conf.d/*.conf;

        location / {
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

}

[email protected][00:35:16]$ cat Dockerfile 
# Nginx dockerfile 2018-07-09

FROM centos
MAINTAINER standby 71standby@gamil

RUN rm -rf /etc/yum.repos.d/*
ADD Centos-7.repo /etc/yum.repos.d/CentOS-Base.repo
ADD epel-7.repo /etc/yum.repos.d/epel.repo
ADD nginx-1.12.2.tar.gz /usr/local/src/

# RUN yum install https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm -y

RUN yum install vim wget tree lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop -y

RUN useradd nginx -s /sbin/nologin -M
RUN cd /usr/local/src/nginx-1.12.2 && ./configure --prefix=/usr/local/nginx --with-http_sub_module && make && make install
ADD nginx.conf /usr/local/nginx/conf/
# RUN ln -sv /usr/local/nginx/sbin/nginx /usr/sbin/nginx

ADD index.html /usr/local/nginx/html/
ADD app/* /usr/local/nginx/html/app/

EXPOSE 80 443

CMD ["/usr/local/nginx/sbin/nginx"]
[email protected][00:35:22]$ 

[email protected][00:21:03]$ docker build -t dockerfile-nginx-make:20180710002000 .
Sending build context to Docker daemon  994.3kB
Step 1/14 : FROM centos
 ---> 49f7960eb7e4
Step 2/14 : MAINTAINER standby 71standby@gamil
 ---> Using cache
 ---> 9470da6f3f63
Step 3/14 : RUN rm -rf /etc/yum.repos.d/*
 ---> Using cache
 ---> d284b3695812
Step 4/14 : ADD Centos-7.repo /etc/yum.repos.d/CentOS-Base.repo
 ---> Using cache
 ---> c748ad3e145d
Step 5/14 : ADD epel-7.repo /etc/yum.repos.d/epel.repo
 ---> Using cache
 ---> 7b35b27c806a
Step 6/14 : ADD nginx-1.12.2.tar.gz /usr/local/src/
 ---> Using cache
 ---> 4729a577fad3
Step 7/14 : RUN yum install vim wget tree lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop -y
 ---> Using cache
 ---> abfd8019dff7
Step 8/14 : RUN useradd nginx -s /sbin/nologin -M
 ---> Using cache
 ---> b29432e170eb
Step 9/14 : RUN cd /usr/local/src/nginx-1.12.2 && ./configure --prefix=/usr/local/nginx --with-http_sub_module && make && make install
 ---> Using cache
 ---> 076ea8c60bae
Step 10/14 : ADD nginx.conf /usr/local/nginx/conf/
 ---> 52b98678a1be
Step 11/14 : ADD index.html /usr/local/nginx/html/
 ---> 2228a36de4c0
Step 12/14 : ADD app/* /usr/local/nginx/html/app/
 ---> d09b507721dd
Step 13/14 : EXPOSE 80 443
 ---> Running in aa3a30431bb4
Removing intermediate container aa3a30431bb4
 ---> c06e9e266fce
Step 14/14 : CMD ["/usr/local/nginx/sbin/nginx"]
 ---> Running in ab2eef1158d0
Removing intermediate container ab2eef1158d0
 ---> eb3c0e74d31b
Successfully built eb3c0e74d31b
Successfully tagged dockerfile-nginx-make:20180710002000
[email protected][00:21:13]$

[email protected][00:21:14]$ docker images 
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
dockerfile-nginx-make   20180710002000      eb3c0e74d31b        5 seconds ago       508MB
dockerfile-nginx-make   20180710001500      d3dd300ab743        6 minutes ago       508MB
dockerfile-nginx-make   20180710001200      0e82c28b3e37        9 minutes ago       508MB
dockerfile-nginx-make   20180710001000      cfec9eec093c        11 minutes ago      508MB
dockerfile-nginx-make   20180710000500      bdf7f5e65a2d        15 minutes ago      508MB
dockerfile-nginx-make   v2                  2f72d76314a3        33 minutes ago      508MB
dockerfile-nginx-make   v1                  d01823870cac        2 hours ago         507MB
dockerfile-yum-ngin     v2                  6d54c875204b        3 hours ago         561MB
dockerfile-yum-ngin     v1                  7cebf51fd7b9        3 hours ago         432MB
nginx-yum               v2                  f66b6be1bed7        3 hours ago         531MB
nginx-yum               v1                  84d367dcb28f        4 hours ago         531MB
nginx                   latest              3c5a05123222        3 days ago          109MB
ubuntu                  latest              113a43faa138        4 weeks ago         81.2MB
centos                  latest              49f7960eb7e4        4 weeks ago         200MB
centos                  7.2.1511            0a2bad7da9b5        8 months ago        195MB
[email protected][00:21:18]$

[email protected][00:23:41]$ docker ps 
CONTAINER ID        IMAGE                                  COMMAND                  CREATED             STATUS              PORTS                           NAMES
c742b2ed9faf        dockerfile-nginx-make:20180710002000   "/usr/local/nginx/sb…"   50 seconds ago      Up 49 seconds       443/tcp, 0.0.0.0:8080->80/tcp   naughty_spence
[email protected][00:23:52]$ 
[email protected][00:24:00]$ ss -tnl
State      Recv-Q Send-Q                             Local Address:Port                                            Peer Address:Port              
LISTEN     0      128                                            *:22                                                         *:*                  
LISTEN     0      100                                    127.0.0.1:25                                                         *:*                  
LISTEN     0      128                                           :::8080                                                      :::*                  
LISTEN     0      128                                           :::22                                                        :::*                  
LISTEN     0      100                                          ::1:25                                                        :::*                  
[email protected][00:24:03]$ 

驗證結果

進入運行著的容器查看

[email protected][00:47:01]$ docker exec -it c742b2ed9faf bash
[root@c742b2ed9faf /]# 
[root@c742b2ed9faf /]# ps -ef |grep nginx
root          1      0  0 16:23 pts/0    00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx         5      1  0 16:23 pts/0    00:00:00 nginx: worker process
nginx         6      1  0 16:23 pts/0    00:00:00 nginx: worker process
root         23      7  0 16:47 pts/1    00:00:00 grep --color=auto nginx
[root@c742b2ed9faf /]# cat /usr/local/nginx/conf/nginx.conf

user nginx nginx;
worker_processes auto;

pid  logs/nginx.pid;

daemon off;

events {
    worker_connections  102400;
    use epoll;
}

http {
    log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘
                      ‘$status $body_bytes_sent "$http_referer" ‘
                      ‘"$http_user_agent" "$http_x_forwarded_for"‘;

    access_log  logs/access.log  main;
    error_log  logs/error.log;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             mime.types;
    default_type        application/octet-stream;


    server {
        listen       80 default_server;
        server_name  _;
        root         /usr/local/nginx/html;

        include conf.d/*.conf;

        location / {
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

}

[root@c742b2ed9faf /]# 
[root@c742b2ed9faf /]# 
[root@c742b2ed9faf /]# ll /usr/local/nginx/html/          
total 8
-rw-r--r--. 1 root root 537 Jul  9 15:48 50x.html
drwxr-xr-x. 2 root root  24 Jul  9 16:21 app
-rw-r--r--. 1 root root  56 Jul  9 16:01 index.html
[root@c742b2ed9faf /]# cat /usr/local/nginx/html/index.html
<h1>This is index page of nginx running in docker.</h1>
[root@c742b2ed9faf /]# 
[root@c742b2ed9faf /]# cat /usr/local/nginx/html/app/index.html 
app index page
[root@c742b2ed9faf /]# 

本地訪問

技術分享圖片

Docker制作基礎鏡像