装docker是好久之前装的了,也没什么坑,网上的教程都有,就不演示了。这里推荐菜鸟教程的docker教程,个人认为docker基础用法,这个网站是相对比较完整而且翻译比较好的。
Docker 教程 | 菜鸟教程
1、配置加速器
root@openmediavault:/# cd /etc/docker/
root@openmediavault:/etc/docker# dir
daemon.json key.json myapp
root@openmediavault:/etc/docker# cat daemon.json
{
"registry-mirrors":[
"https://tukjbhel.mirror.aliyuncs.com",
"https://docker.mirrors.ustc.edu.cn/",
"https://hub-mirror.c.163.com",
"https://registry.docker-cn.com"
]
}
发现只有第一个可以下载,而且速度很快,阿里云的docker镜像需要登录账号密码,如何配置如下链接:docker配置阿里云镜像_普通网友的博客-CSDN博客_docker配置阿里云镜像
阿里私有镜像站网址:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台
私有镜像教程:https://www.jb51.net/article/243066.htm
2、镜像拉取与容器构建
我的需求是,创建一个docker虚拟机,配置ssh,外部主机可以访问这台内部虚拟机。基本命令教程:使用网络 - 容器互联 - 《Docker — 从入门到实践(v1.3.0)》 - 书栈网 · BookStack
1)首先拉取最新的ubuntu镜像。
docker pull ubuntu
2)将镜像解压到容器,并启动ubuntu
root@openmediavault:/etc# docker run -itd --privileged --name ubuntu --u root -p 9201:9200 ubuntu /bin/bash
# run和start 区别
# -itd -t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i 则让容器的标准输入保持打开。-d 后台运行。
# 注意:需要设置 --privileged参数,确保能获取到真正的root权限。
# --u root 使用root权限登录
# -p 9201:9200 绑定端口,对应关系 宿主主机端口:主机端口
# /bin/bash 启动时运行的脚本
3)并配置ssh,发现这是个最小镜像,没有vi最基本的文本编辑器,所以只能使用echo进行简单处理,配置代理上网。
在/etc/apt/apt.conf.d,新增文件proxy,
echo 'Acquire::http::Proxy "http://xxxxxx:8080";' > proxy
输入以下命令,更新apt镜像,安装vi文字编辑器。
apt update
apt upgarde
apt install vim
4)现在无法使用sytemctl命令,查看、启动或关掉进程。内部就没有安装systemd,也就没有/sbin/init,这会导致启动容器失败。因此需要先进入容器,安装好systemd,在对配置进行修改。
docker exec -it ubuntu /bin/bash
apt install systemd
ls -al /sbin/init
此时使用 systemctl start ssh 会报错:ystem has not been booted with systemd as init system (PID 1). Can‘t operate.
退出容器,关掉docker 。
$ exit
$ docker stop ubuntu
$ sudo systemctl stop docker
修改 config.v2.json
中的 Path
和 Cmd
,由 /bin/bash
设置为 /sbin/init
。注意:一定要先关闭docker服务,修改配置才能生效。
# vim /var/lib/docker/containers/0f22b0c68de9819eb72d02094a5d23d3ee66e4eabd3563b9190f48ac83c55f22/config.v2.json
保存修改后,重启docker,再重启docker容器,重新配置即可。
$ docker start ubuntu
$ docker exec -it ubuntu /bin/bash
$ sudo systemctl start ssh
$ sudo systemctl status ssh
3、镜像导入和导出
1)将已经做好的镜像打包
docker export CONTAINER-ID > ubuntu.tar
2)将打包的ubuntu.tar文件,复制到另一台有docker环境的主机,导入即可。
cat ubuntu.tar | docker import - ubuntu
参考:解决 System has not been booted with systemd as init system (PID 1). Can‘t operate._duapple的博客-CSDN博客