Dockerfile常用指令
1)*FROM:构建镜像基于那个镜像
例如:FROM centos:7
2) MAINTAINER:镜像维护者姓名或邮箱地址
例如:MAINAINER admin
3) *RUN:构建镜像时运行的shell命令
例如:
RUN [“yum ,install,httpd”]
RUN yum -y install httpd
4) *CMD:运行容器时执行的shell命令
例如:
CMD [“/bin/bash”]
一般服务类镜像不支持/bash,仅支持/bin/sh,需注意
5) *EXPOSE声明容器的服务端口
例如:EXPOSE 80 443
6)*ENV:设置容器环境变量
例如:
ENV MYSQL_ROOT_PASSWORD 123.com
7)*ADD:拷贝文件或目录到镜像,如果时URL或压缩包会自动下载或自动解压
ADD <源文件>...<目标文件>
ADD [“源文件”...”目标文件”]
8)*COPY:拷贝文件或目录到镜像容器内,跟ADD类似,但不具备自动下载或解压功能
9)ENTRYPOINT:运行容器时执行的shell命令
例如:
ENTRYPOINT[“/bin/bash”,”-c”,”command”]
ENTRYPOINT/bin/bash -c ‘command’
10)*VOLUME:指定容器挂载点到宿主机自动生成的目录或其他容器
例如:
VOLUME [“/var/lib/mysql”]
Docker run -itd --name xxx -v /var/lib/mysql --volume
11)USER:为RUN,CMD,和ENTRYPOINT执行命令指定运行用户
12)*WORKDIR:为RUN,CMD,ENTRYPOINT,COPY和ADD设置工作目录,意思为切换目录
例如:
WORKDIR: /var/lib/mysql
13)HEALTHCHECK:健康检查
14) ARG:构建时指定一些参数
例如:
FROM centos:7
ARG user
USER $user
注意:
1,RUN在building时运行,可以写多条
2,CMD和ENRYPOIN在运行container时运行,只能写一条,如果写多条,最后一条生效
3,CMD在run时可以被COMMAND覆盖,ENTRYPOINT不会被COMMAND覆盖,但可以指定--entrypoint覆盖。
4,如果在dockerfile里需要往镜像里导入文件,则此文件必须在dockerfile所在目录或子目录下
Registry私有仓库部署
写一个dockerfile,基于centos:7,部署安装NGINX服务
FROM centos:7
RUN yum -y install gcc pcre pcre-devel openssl openssl-devel zlib zlib-devel
COPY nginx-1.14.0.tar.gz /
RUN tar -zxf nginx-1.14.0.tar.gz -C /usr/src
RUN useradd -M -s /sbin/nologin nginx
WORKDIR /usr/src/nginx-1.14.0
RUN ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
RUN make && make install
RUN ln -s /usr/local/nginx/sbin/* /usr/local/bin/
RUN nginx -t
RUN nginx
EXPOSE 80
EXPOSE声明的端口仅仅是让看的,并不会去修改
查看容器的详细信息
[root@localhost web]# docker inspect test-web
如果想要保证容器运行之后,nginx服务就直接开启,不必手动开启,我们可以在命令最后加上:nginx -g “daemon off;”
[root@localhost web]# docker run -itd --name testweb1 test-web:latest nginx -g "daemon off;"
Registry
用dockers容器运行registry私有仓库
[root@localhost web]# docker pull registry:2
//运行私有仓库服务
[root@localhost web]# docker run -itd --name registry --restart=always -p 5000:5000 -v /registry:/var/lib/registry registry:2
-p:端口映射,宿主机端口:容器暴露的端口。
-v:挂载目录,宿主机的目录:容器内的目录
[root@localhost web]# vim /usr/lib/systemd/system/docker.service

[root@localhost web]# systemctl daemon-reload
[root@localhost web]# systemctl restart docker.service
到这里我们的私有仓库就已经部署完成,下面我们来上传一个镜像
//镜像重命名
[root@localhost web]# docker tag testweb:latest 192.168.1.10:5000/test
[root@localhost web]# docker ps
上传镜像
[root@localhost web]# docker push 192.168.1.10:5000/test:latest
下载镜像
docker pull 192.168.1.10:5000/test:latest

浙公网安备 33010602011771号