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

11USER:RUNCMD,ENTRYPOINT执行命令指定运行用户

 

12*WORKDIR:RUNCMDENTRYPOINTCOPYADD设置工作目录,意思为切换目录

例如:

WORKDIR:  /var/lib/mysql

 

13HEALTHCHECK:健康检查

 

14) ARG:构建时指定一些参数

例如:

FROM centos7

ARG user

USER $user

 

注意:

1,RUNbuilding时运行,可以写多条

2,CMDENRYPOIN在运行container时运行,只能写一条,如果写多条,最后一条生效

3,CMDrun时可以被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

 

posted on 2020-04-09 19:41  痴人_说梦  阅读(89)  评论(0)    收藏  举报