Docker镜像

一个通用的私有仓库,可以提升效率 Docker镜像构建分为两种,一种是手动构建,一种是Dockerfile(自动构建)

基于centos镜像构建手动制作nginx镜像

docker run --name testdocker -it centos
yum install wget -y
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum install nginx -y

nginx配置文件中需要运行在前台,vi /etc/nginx/nginx.conf 中加入 daemon off;

root@jenkins:~# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                  NAMES
627b8bcc624c        centos              "/bin/bash"              29 minutes ago      Exited (0) 15 seconds ago                          dockerfornginx
root@jenkins:~# docker commit -m "test nginx" 627b8bcc624c dockerfornginx/dockerfornginx:v1
sha256:8ddfd5a400d738d5d69d7f1efae955fb8ec55c2a8741efff8f6863892cf3c0e1
root@jenkins:~# docker images
REPOSITORY                      TAG                 IMAGE ID            CREATED             SIZE
dockerfornginx/dockerfornginx   v1                  8ddfd5a400d7        8 seconds ago       371 MB
#注释
-m 描述
容器ID
第一个dockerfornginx是仓库的名称
第二个dockerfornginx是镜像的名称
v1 标签,如果是最后一个版本我们可以打latest

启动我们做好的镜像

root@jenkins:~# docker run --name docker01 -d -p 8888:80 dockerfornginx/dockerfornginx:v1 nginx
3193e76232eb8c32e8cb08fcf3d609619219e2641b111e7a0f00a8d51bfafb3a
我们要写镜像全称,带上标签
提示:后面的nginx不是镜像的nginx,而是服务的名称
root@jenkins:~# docker ps
CONTAINER ID        IMAGE                              COMMAND             CREATED             STATUS              PORTS                  NAMES
3193e76232eb        dockerfornginx/dockerfornginx:v1   "nginx"             6 seconds ago       Up 5 seconds        0.0.0.0:8888->80/tcp   docker01
root@jenkins:~# sh /data/docker/docker_in.sh docker01
[root@3193e76232eb /]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1/nginx: master pro
tcp6       0      0 :::80                   :::*                    LISTEN      1/nginx: master pro


利用Dockerfile进行构建nginx的镜像

注意:D需要大写,当我们构建dockerfile的时候,docker默认会在我们当前目录读取一个名为Dockerfile的文件。这时候的D必须大写

root@jenkins:/data/docker/dockerfile/nginx# pwd
/data/docker/dockerfile/nginx
root@jenkins:/data/docker/dockerfile/nginx# cat Dockerfile
# This Dockerfile

# Base image
FROM centos

# Maintainer
MAINTAINER docker01 xxx@gmail.com

#Commands
RUN rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
RUN yum install -y nginx && yum clean all
RUN echo "daemon off;" >>/etc/nginx/nginx.conf
ADD index.html /usr/share/nginx/html/index.html
EXPOSE 80
CMD ["nginx"]
#井号代表注释
#Base image  除了注释的第一行,必须是FROM,意思就是我们需要告诉dockerfile基础镜像是什么
#Maintainer 维护信息

#Commands 命令

#ADD index.html 这个文件需要我们在当前目录下有才可以,我们配置我们可以准备好,然后使用ADD命令进行添加或修改
#EXPOSE 对外端口号
#CMD [“nginx”] 它要启动的命令是nginx (就算是nginx服务)

Dockerfile中的index.html在同级目录中新建 echo www.testdocker.com >index.html

效果展示

root@jenkins:/data/docker/dockerfile/nginx# ll
total 8
-rw-r--r-- 1 root root 775 Dec  9 02:52 Dockerfile
-rw-r--r-- 1 root root  19 Dec  9 02:54 index.html
root@jenkins:/data/docker/dockerfile/nginx# docker build -t sup:v2 .

提示:.代表构建的位置,我们是当前目录,我们使用docker build进行构建

004-Docker镜像-LMLPHP

启动镜像

root@jenkins:/data/docker/dockerfile/nginx# docker run --name supv1 -d -p 8288:80 sup:v2
f44218f249da4427fe60bd2a21f78b16582e88900a3c4456010be144eda9ec0d
root@jenkins:/data/docker/dockerfile/nginx# docker ps
CONTAINER ID        IMAGE                              COMMAND             CREATED             STATUS              PORTS                  NAMES
f44218f249da        sup:v2                             "nginx"             3 seconds ago       Up 2 seconds        0.0.0.0:8288->80/tcp   supv1
3193e76232eb        dockerfornginx/dockerfornginx:v1   "nginx"             21 minutes ago      Up 21 minutes       0.0.0.0:8888->80/tcp   docker01

004-Docker镜像-LMLPHP

提示:Dockerfile格式参考,https://my.oschina.net/u/3635512/blog/3138998

12-09 14:09