介绍
本文介绍为 Docker 镜像:
- 添加ssh
- 修改镜像密码
- 启动容器自启 ssh
包括三大Linux 的发行版:
- centos7
- ubuntu 14
- alpine
Centos7
Dockerfile
# docker hub 中的开源镜像
FROM datagrip/greenplum:6.1
MAINTAINER 孙武@gsunwu@163.com
# datagrip/greenplum 是 CentOS Linux release 7.7.1908 (Core),为他添加ssh功能
RUN apt-get -o Acquire::Check-Valid-Until=false update
RUN apt update && apt install -y openssh-server
# 修改镜像密码为root:root
RUN echo 'root:root' | chpasswd
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN sed -i 's/#PermitRootLogin yes/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config
# 设置自启脚本并授予可执行权限
RUN echo '/usr/sbin/sshd -D\n\
tail -f /dev/null\n' >/init.sh && chmod +x /init.sh
# 开放22端口
EXPOSE 22
# 指定入口文件,启动镜像的时候执行
ENTRYPOINT /init.sh
alpine
Dockerfile
# 这个镜像是 ubuntu 的
FROM boostport/hbase-phoenix-all-in-one:2.0-5.0
MAINTAINER 孙武@gsunwu@163.com
# 替换阿里云的源
RUN echo "http://mirrors.aliyun.com/alpine/latest-stable/main/" > /etc/apk/repositories
RUN echo "http://mirrors.aliyun.com/alpine/latest-stable/community/" >> /etc/apk/repositories
RUN apk update && apk add --no-cache openssh-server
RUN mkdir /var/run/sshd
# 修改镜像的账号和密码
RUN echo "root:root" | chpasswd
RUN rm -rf /etc/ssh/sshd_config
COPY sshd_config /etc/ssh/sshd_config
# 设置自启脚本并授予可执行权限
RUN echo $'/usr/sbin/sshd -D\n\
tail -f /dev/null\n' >/init.sh && chmod +x /init.sh
# 开放22端口
EXPOSE 22
# 指定入口文件,启动镜像的时候执行
ENTRYPOINT /init.sh
Ubuntu
Dockerfile
# ubuntu 的镜像
FROM flink:scala_2.12
MAINTAINER 孙武@gsunwu@163.com
# 添加ssh
RUN apt-get -o Acquire::Check-Valid-Until=false update
RUN apt update && apt install -y openssh-server
RUN mkdir /var/run/sshd
# 修改账号名称和密码
RUN echo 'root:root' | chpasswd
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN sed -i 's/#PermitRootLogin yes/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config
# 设置自启脚本并授予可执行权限
RUN echo '/usr/sbin/sshd -D\n\
tail -f /dev/null\n' >/init.sh && chmod +x /init.sh
# 开放22端口
EXPOSE 22
# 指定入口文件,启动镜像的时候执行
ENTRYPOINT /init.sh
工具
在开发的时候,往往需要重新构建镜像、运行镜像、进入容器。为了减少重复的工作量,我使用了 Make 工具,以下是一个构建过程中的 Makefile, 将 <…> 替换即可直接使用。
#!/usr/bin/make
repo :=<your repo>
name :=greenplum
version := v0.1.1
sshport :=<your ssh's port>
t:
docker build -t ${repo}/${name}:${version} .
v :
@echo "version ${name}:${version}"
rmi:
docker rmi -f ${name}:${version}
run:
docker run -p ${sshport}:22 -itd --privileged --name ${name}${version} ${repo}/${name}:${version}
del:
docker rm -f ${name}${version}
e:
docker exec -it ${name}${version} bash
bld :
docker build -t ${repo}/${name}:${version} .
push:
docker push ${repo}/${name}:${version}
logs:
docker logs ${name}${version}
rb:del bld run e
nb:bld run e
使用说明:
make t 构建镜像
make v 查看镜像信息
make rmi 移除镜像
make run 运行镜像
make del 删除容器
make e 进入容器
make rb 删除镜像、构建镜像、运行容器、进入容器