如何搭建完整的docker版ubuntu
docker的ubutu镜像是最小化系统,需要作下载相应的软件才能满足使用。
装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
4、构建postgres数据库服务器
1)拉取镜像
docker pull postgres
2)查看本地镜像
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
postgres latest 07e2ee723e2d 2 years ago 374MB
ubuntu latest ba6acccedd29 2 years ago 72.8MB
enmotech/opengauss latest b4dd24d09223 2 years ago 383MB
3) 运行容器
docker run -itd --name postgres -e POSTGRES_PASSWORD=10086 -e TZ=PRC -d -p 5432:5432 -v /data/docker/pg/data:/var/lib/postgresql/data postgres
----------参数解释
run:创建并运行一个容器; –name:指定创建的容器的名字;
-e POSTGRES_PASSWORD=password,设置环境变量,指定数据库的登录口令为password;
-p 54321:5432,端口映射将容器的5432端口映射到外部机器的5432端口;
-d postgres:12.4,指定使用postgres:12.4作为镜像;
-e TZ=PRC 时区-中国
-v 来指定把postgres的数据目录 /data/docker/pg/data:/var/lib/postgresql/data 映射到/data/docker/pg/data里面.
注意: postgres镜像默认的用户名为postgres,登陆口令为创建容器是指定的值。
4)安装成功
root@: docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
42eadd71b7ba ubuntu "/bin/bash" 8 minutes ago Up 8 minutes 0.0.0.0:1434->1434/tcp, :::1434->1434/tcp ubuntu
53796dbacc74 postgres "docker-entrypoint.s…" 5 weeks ago Up 11 minutes 5432/tcp wizardly_gould
5)进入镜像
docker exec -it postgres bash
参考:解决 System has not been booted with systemd as init system (PID 1). Can‘t operate._duapple的博客-CSDN博客
更多推荐
所有评论(0)