docker(二)

假如想象 提交于 2019-11-29 05:08:08

手动制作docker镜像

手动制作openssh的docker镜像

  • 启动一个容器, 安装服务
$  docker run -it -p 1022:22 centos:6.9
$ yum -y install openssh-server
$ /etc/init.d/sshd start
$ echo 123456|passwd --stdin root  # 此时输入ssh root@ip 1022 可以远程容器


  • 把刚才安装好服务的容器, 提交为镜像

    docker commit

$ docker commit 05b05cf43d2c centos6.9_ssh:v1
$ docker images centos6.9_ssh
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos6.9_ssh       v1                  85cb44e9a390        2 minutes ago       323MB


  • 测试

    /usr/sbin/sshd -D 前台启动sshd服务, 会夯住

$ docker run -d -p 1322:22 centos6.9_ssh:v1 /usr/sbin/sshd -D

输入 ssh root@192.168.221.10 1222, 成功登陆


手动制作http和ssh的docker镜像, 并且自定制密码

  • 启动一个容器, 安装服务
$ docker run -it -p 1422:22 -p 8888:80 --name http_server centos6.9_ssh:v1
$ yum -y install openssh-server
$ /etc/init.d/sshd start
$ yum -y install httpd
$ /etc/init.d/httpd start


  • 使用linux进行测试ssh
$ ssh root@192.168.221.10 -p 1422


  • 使用linux测试http服务
$ curl -I 192.168.221.10:8888
HTTP/1.1 403 Forbidden
Date: Thu, 28 Nov 2019 12:27:28 GMT
Server: Apache/2.2.15 (CentOS)
Accept-Ranges: bytes
Content-Length: 4961
Connection: close
Content-Type: text/html; charset=UTF-8


  • 把刚才安装好服务的容器, 提交为镜像

    docker commit

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                        NAMES
e84010fa4dbb        centos6.9_ssh:v1    "/bin/bash"         43 hours ago        Up 19 minutes       0.0.0.0:1422->22/tcp, 0.0.0.0:8888->80/tcp   http_server

$ docker commit e84010fa4dbb http_server_images
sha256:9fce8392068370a0c16c70f389b18340778bb3721bf3469daf922c2982d9cace

$ docker images http_server_images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
http_server_images   latest              9fce83920683        46 seconds ago      413MB


  • 编写脚本
$ vim init.sh
#!/bin/bash
echo $SSH_PWD|passwd --stdin root
/etc/init.d/httpd start
/usr/sbin/sshd -D

$ chmod +x init.sh


  • 提交为镜像
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                        NAMES
e84010fa4dbb        centos6.9_ssh:v1    "/bin/bash"         44 hours ago        Up About an hour    0.0.0.0:1422->22/tcp, 0.0.0.0:8888->80/tcp   http_server
$ docker commit e84010fa4dbb http_server_images:v5


  • 启动并新建容器
$ docker run -d  --env "SSH_PWD=123" -p 4022:22 -p 90:80  --name http_server_v5 http_server_images:v5   /init.sh


dockerfile自动构建docker


dockerfile主要组成部分

  • 基础镜像信息

    FROM: centos:6.9


  • 制作镜像操作指令

    RUN yum install openssh-server -y


  • 容器启动时执行命令

    CMD ["/bin/bash"]


dockerfile常用指令

  • FROM

    指定基础镜像


  • MAINTAINER

    指定维护者信息, 可以没有


  • RUN

    在命令前加上RUN


  • ADD

    COPY文件, 会自动解压


  • COPY

    复制文件


  • ENV

    环境变量


  • ENTRYPOINT

    容器启动后执行的命令(无法被替换, 启动容器的时候指定的命令, 会被当成参数)


  • WORKDIR

    设置当前工作目录


  • VOLUME

    设置卷, 挂载主机目录


  • EXPOSE

    指定对外的端口(-P 随机端口)


  • CMD

    指定容器启动后要干的事情


创建一个简单的dockerfile

  • 创建文件
$ mkdir -p /opt/dockerfile/centos6.9_ssh
$ vim /opt/dockerfile/centos6.9_ssh/dockerfile
FROM centos:6.9
RUN yum -y install openssh-server 
RUN /etc/init.d/sshd start && echo 123456 |passwd --stdin root
CMD ["/usr/sbin/sshd", "-D"]


  • 构建镜像
$ docker image build -t centos6.9_ssh:v2 /opt/dockerfile/centos6.9_ssh/


  • 查看镜像
$ docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED              SIZE
centos6.9_ssh                v2                  523057254626        About a minute ago   323MB
centos6.9_ssh                v1                  85cb44e9a390        45 hours ago         323MB


  • 查看构建镜像的流程
$ docker image history centos6.9_ssh:v2
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
523057254626        2 minutes ago       /bin/sh -c #(nop)  CMD ["/usr/sbin/sshd" "-D…   0B                  
297dfb187996        2 minutes ago       /bin/sh -c /etc/init.d/sshd start && echo 12…   5.45kB              
76120e8ba1c7        11 minutes ago      /bin/sh -c yum -y install openssh-server        128MB               
2199b8eb8390        8 months ago        /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B                  
<missing>           8 months ago        /bin/sh -c #(nop)  LABEL name=CentOS Base Im…   0B                  
<missing>           8 months ago        /bin/sh -c #(nop) ADD file:0e6d175401c5b4260…   195MB      


  • 新建并启动容器
$ docker run -d -p 1022:22 centos6.9_ssh:v2


  • 测试
$ ssh root@192.168.221.10 -p 1022


创建一个支持sshd和httpd双服务的镜像

  • 创建文件和脚本
$ vim /opt/dockerfile/centos6.9_ssh_httpd/dockerfile 
FROM centos:6.9
RUN yum -y install openssh-server 
RUN /etc/init.d/sshd start && echo 123456 |passwd --stdin root
CMD ["/usr/sbin/sshd", "-D"]

$ vim /opt/dockerfile/centos6.9_ssh_httpd/init.sh 
#!/bin/bash
/etc/init.d/httpd start
/usr/sbin/sshd -D


  • 构建镜像
$ docker build -t centos_ssh_httpd:v1 /opt/dockerfile/centos6.9_ssh_httpd/


  • 基于镜像创建并启动容器
$ docker run -d -p 1122:22 -p 88:80 --name ssh_http_server centos_ssh_httpd:v1

$ docker ps -l
CONTAINER ID        IMAGE                 COMMAND                CREATED             STATUS              PORTS                                      NAMES
bbca28761e60        centos_ssh_httpd:v1   "/bin/bash /init.sh"   2 minutes ago       Up 2 minutes        0.0.0.0:1122->22/tcp, 0.0.0.0:88->80/tcp   ssh_http_server


  • 容器内测试
$ ssh root@docker01 -p 1122
$ /etc/init.d/httpd status
httpd (pid  14) is running...
$ /etc/init.d/sshd status
openssh-daemon (pid  19) is running...


  • 宿主机测试
$ curl -I docker01:88
HTTP/1.1 403 Forbidden
Date: Thu, 28 Nov 2019 18:10:48 GMT
Server: Apache/2.2.15 (CentOS)
Accept-Ranges: bytes
Content-Length: 4961
Connection: close
Content-Type: text/html; charset=UTF-8


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!