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 [email protected]
#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进行构建
启动镜像
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
提示:Dockerfile格式参考,https://my.oschina.net/u/3635512/blog/3138998