装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

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博客

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐