Docker 实战(二):基于 Dockerfile 构建基础镜像

这里使用 Dockerfile 构建一个 Ubuntu 的基础镜像,并且安装了 OpenSSH、Supervisor 等基础服务。使用 Supervisor 可以更好的同时控制多个我们希望执行的程序。

最新的 Docker 版本建议安装 Docker for Mac,原先的 Docker Toolbox 方式已经不建议使用。

创建 Dockerfile 脚本

Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# Docker file for ubuntu 16
FROM ubuntu:16.04

# 创建者信息
MAINTAINER batizhao <zhaobati@gmail.com>

# 使用阿里云镜像
RUN sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list

# 安装基础工具包
RUN \
apt-get update && \
apt-get -y upgrade && \
apt-get install -y vim openssh-server supervisor && \
rm -rf /var/lib/apt/lists/*

# 创建 ssh 和 supervisor 目录
RUN mkdir -p /var/run/sshd
RUN mkdir -p /var/log/supervisor

# 设置 root ssh 远程登录密码为 password
RUN echo "root:password" | chpasswd
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd

# 添加 supervisor 的配置文件
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf

# 开放 SSH 22 端口
EXPOSE 22

# 容器启动命令
CMD ["/usr/bin/supervisord"]

创建 Supervisor 脚本

在 Dockerfile 文件所在目录创建 supervisord.conf
1
2
3
4
5
[supervisord]
nodaemon=true

[program:sshd]
command=/usr/sbin/sshd -D

在执行以下步骤之前,需要先启动 Docker。

使用 Dockerfile 构建镜像并运行

在 Dockerfile 文件所在目录执行命令
1
$ docker build -t batizhao/ubuntu .
启动 Docker 容器
1
$ docker run -p 2200:22 -it batizhao/ubuntu
宿主机做为 SSH 客户端
1
$ ssh root@localhost -p 2200

提交到仓库

1
$ docker push batizhao/ubuntu