一、dockerfile制作镜像步骤
Dockerfile结构大致分为四个部分:
Dockerfile每行支持一条指令,每条指令可带多个参数,支持使用以#号开头的注释
指令 | 对象 | 含义 |
---|---|---|
FROM | 镜像 | 指定新镜像所基于的镜像,必须为第一条指令 |
MAINTAINER | 名字 | 新镜像的维护人信息 |
RUN | 命令 | 在所基于的镜像上执行命令,并提交到新镜像中 |
EXPOSE | 端口号 | 指定新镜像加载到Docker时开启的端口号 |
ENV | 环境变量 变量值 | 设置一个环境变量的值,会被后面的RUN使用 |
ADD | 源文件/目录 目标文件/目录 | 将源文件复制到目标文件,源文件要与Docker位于同一目录下,或者为一个URL |
COPY | 源文件/目录 目标文件/目录 | 将本地主机上的源文件/目录复制到目标地点,源文件/目录要与Dockerfile在同一目录下 |
VOLUME | ["目录"] | 在容器中创建一个挂载点 |
USER | 用户名 /UID | 指定运行容器时的用户 |
WORKDIR | 路径 | 为后续的RUN、CMD、ENTRYPOINT指定工作目录 |
ONBUILD | 命令 | 指定所生成的镜像作为一个基础镜像时所要运行的命令 |
CMD | ["要运行的程序","参数1","参数2"] | 指定启动容器时运行的命令或脚本,只能有一条CMD命令,多条时只有最后一条被执行 |
1)第一个实例:
1、编写dockerfile
mkdir -p /opt/dockerfile/centos6_ssh && cd /opt/dockerfile/centos6_ssh
cat >> dockerfile << ‘EOF‘
FROM centos:6.9
RUN yum -y install openssh-server
RUN /etc/init.d/sshd start
RUN echo 123456 | passwd --stdin root
CMD ["/usr/sbin/sshd","-D"]
EOF
2、docker build构建镜像
docker build -t centos6-ssh:v2 . 在当前路径下生成一个镜像
3、启动容器来测试新构建的镜像
docker run -d -p 1322:22 centos6-ssh:v2
docker ps -a -l --no-trunc 显示全ID
登录创建好的容器:因为映射用的宿主机是1322端口
ssh root@192.168.0.149 -p 1322
查询容器:docker ps -a
停掉容器:docker stop 3b83cf3faa0e
删除容器:docker rm -f 3b83cf3faa0e
2)第二个实例:
手动制作支持ssh-http双服务的docker镜像
1、编写dockerfile
mkdir -p /opt/dockerfile/centos6_ssh_http && cd /opt/dockerfile/centos6_ssh_http
cat >> dockerfile << ‘EOF‘
FROM centos:6.9
RUN yum -y install openssh-server
RUN /etc/init.d/sshd start
RUN echo 123456 | passwd --stdin root
RUN yum -y install httpd 安装Apache
ADD init.sh /init.sh 把当前路径下的init.sh放到容器的跟目录下
CMD ["/bin/bash","/init.sh"]
EOF
[root@bms-6e4a-0918 centos6_ssh_http]# cat dockerfile
FROM centos:6.9
RUN yum -y install openssh-server
RUN /etc/init.d/sshd start
RUN echo 123456 | passwd --stdin root
RUN yum -y install httpd
ADD init.sh /init.sh
CMD ["/bin/bash","/init.sh"]
[root@bms-6e4a-0918 centos6_ssh_http]# cat >>init.sh << ‘EOF‘
> /etc/init.d/httpd start
> /usr/sbin/sshd -D
> EOF
2、docker build构建镜像
docker build -t centos6-ssh_http:v2 . 在当前路径下生成一个镜像
3、启动容器来测试新构建的镜像
docker run -d -p 1321:22 -p 85:80 centos6-ssh_http:v2,因为docker镜像要开启80和22端口,宿主机做映射的端口是85、1321
docker ps -a -l --no-trunc 显示全ID
测试Apache是否OK:curl -I 192.168.0.149:85
登录容器:
ssh root@192.168.0.149 -p 1322
停容器、删容器:
3)扩展
[root@bms-6e4a-0918 centos6_ssh_http]# cat dockerfile
FROM centos:6.9
RUN yum -y install openssh-server
RUN /etc/init.d/sshd start
RUN echo 123456 | passwd --stdin root
RUN yum -y install httpd
ADD init.sh /init.sh
EXPOSE 22 80 docker镜像开启容器的时候自动开启22、80端口
CMD ["/bin/bash","/init.sh"]
[root@bms-6e4a-0918 centos6_ssh_http]# cat >>init.sh << ‘EOF‘
> /etc/init.d/httpd start
> /usr/sbin/sshd -D
> EOF
[root@bms-6e4a-0918 centos6_ssh_http]# docker run -d -P centos6-ssh_http:v3 宿主机会自动分配端口和容器的22、85做映射,通过docker ps -a -l查看
原文:https://www.cnblogs.com/csren12/p/13715753.html