镜像拉取

拉取 ubuntu 镜像

docker pull ubuntu:latest

进入镜像并将其启动

docker run -it ubuntu:latest /bin/bash

内部配置

在镜像内安装 ssh 服务

## 更新apt,这一步不可少
apt update && apt upgrade -y

## 安装 openssh-server 服务
apt install -y openssh-server

ssh 配置

sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config

## 设置ssh的账号密码,并启动 ssh
echo 'root:your_password' | chpasswd

## 设置开启自启动ssh
systemctl enable ssh

## 手动启动ssh
service ssh start

保存新的镜像

提交新的镜像,由于在前面改动了镜像的内容,因此,需要将这个镜像提交为新的镜像。

docker commit my_ubuntu_container my_ubuntu_with_ssh

提交完成后,images 会多出一个名为 my_ubuntu_with_ssh 的镜像,这个镜像就是我们刚才提交的镜像

## 查看镜像列表
docker images

## 删除旧的container,及旧的镜像,
docker stop old_container_id
docker rm old_container_id
docker rmi my_ubuntu_container:latest


## 启动新的镜像,静默运行,并将其端口映射为本机的 2222 端口,这样就可以通过 ssh 本机ip+端口访问这台 ubuntu 主机了
docker run -d -p 2222:22 my_ubuntu_with_ssh:latest /usr/sbin/sshd -D

验证

## ssh 连接刚才的镜像
ssh user@192.168.1.128

## 在内部执行并安装必要的包
apt install curl nano vim nginx -y

如果docker重启后,ubuntu 系统停了,想要再次ssh发现ssh关了,可以再次进到镜像中启动ssh

## 启动 ssh 服务
service ssh start

结语

如何中间断开了 ubuntu 系统的 bash,再次进入时,如果 container 是启动的情况下可以使用 attach 启动,没启动的话,可以通过 exec 启动

## container 启动的时候,通过这个连接
docker attach container_id

## 没启动是通过 exec 连接
docker exec -it container_id /bin/bash

当启动镜像后,在镜像内进行了修改,此时,如果需要保存,要记得做如下操作,否则更改将会丢失

## 1. 停止容器
docker stop <container_id>

## 2. 提交容器
docker commit <container_id> my-nginx-temp

## 3. 删除旧容器
docker rm <container_id>

## 4. 添加端口映射
docker run -d -p 2222:22 -p 8000:80 --name ubantu_sh ubuntu_ssh:latest /usr/sbin/sshd -D