在 centos 服务器上运行 docker 容器

在 centos 服务器上运行 docker 容器

在本地打包好镜像后,并且导出 docker 容器。

在 centos 上安装 Docker

首先更新您的系统软件包并安装所需的依赖项

1
2
sudo yum update
sudo yum install yum-utils device-mapper-persistent-data lvm2

将 Docker 稳定存储库添加到系统

1
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

使用yum,安装最新版本的 Docker CE

1
sudo yum install docker-ce

安装 Docker 软件包后,启动 Docker 守护程序并使其在启动时自动启动

1
2
3
4
5
6
7
// 开启 dokcer
sudo systemctl start docker

sudo systemctl enable docker

// 重启 docker
sudo systemctl restart docker

验证 Docker 服务正在运行

1
sudo systemctl status docker

查看 docker 版本

1
docker -v

导出镜像并上传到 centos 服务器

docker 导入导出 tar 包

docker export/import

1
2
3
4
5
6
7
// 查看镜像
docker images

// export/import 导出导入镜像
docker export <镜像id> > <镜像>.tar
docker import - <镜像名> < <镜像>.tar

docker save/load

1
2
3
4
5
6
7
8
// 查看镜像
docker images

// save
docker save -o <镜像>.tar <镜像id>

// load
docker load -i <镜像>.tar

上传到服务器

1
scp -P 22 -r <容器>.tar 用户名@ip:/root/../usr/local/文件夹名

docker 运行容器
在 centos 环境下 import 镜像时,docker run 导入的镜像必须带 command

1
2
3
4
5
// import 镜像run
docker run -itd --name <容器命名> -p 2211:80 <镜像id> command[/bin/bash]

// load
docker run -itd --name <容器命名> -p 2211:80 <镜像id>

查看运行的容器

1
docker ps -a

docker 容器运行成功后,查看容器 IP:docker inspect <容器id> |grep IPAddress

1
2
3
4
// 查看容器网络是否联通
ping <容器IP>

curl <容器IP>:<容器暴露端口>

以上都没问题,则表示容器部署成功

docker 的网络模式

Bridge 模式 –net=bridge(默认)

在 centos 服务器安装 docker 环境后,会在宿主机安装一个虚拟网桥 docker0。可以使用宿主机在 docker0 上的 IP 地址来代替 localhost

通过 ip addr 命令可以看到虚拟网桥 docker0

1
2
3
4
5
6
7
8
// 查看宿主机网络
ip addr

// 查看容器 port
docker port 42a00eadd01e

// 查看容器的网关地址
docker inspect 42a00eadd01e | grep IPAddress

基于对 net namespace 的控制,docker可以为在容器创建隔离的网络环境,在隔离的网络环境下,容器具有完全独立的网络栈,与宿主机隔离,也可以使容器共享主机或者其他容器的网络命名空间。

容器通过DHCP获取一个与 docker0 同网段的 IP 地址,并默认连接到 docker0 网桥,以此实现容器与宿主机的网络互通

Host 模式 –net=host

直接使用容器宿主机的网络命名空间。
将不拥有自己独立的Network Namespace,即没有独立的网络环境。它使用宿主机的ip和端口。

Container 模式 –net=container:指定容器名

与 host 模式类似,只是容器将与指定的容器共享网络命名空间

None模式 –net=none

为容器创建独立网络命名空间,但不为它做任何网络配置,容器中只有 lo,用户可以在此基础上,对容器网络做任意定制。

centos 上防火墙基本使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 查看所有打开的端口
firewall-cmd --zone=public --list-ports

// 更新防火墙规则
firewall-cmd --reload

// 开启端口,成功开启后需要 reload
firewall-cmd --zone=public --add-port=80/tcp --permanent (--permanent永久生效,没有此参数重启后失效) #开启80端口

// 查看端口是否开启
firewall-cmd --zone=public --query-port=80/tcp

// 删除端口
firewall-cmd --zone=public --remove-port=80/tcp --permanent #删除80端口配置

docker 启动后映射的端口无法被访问问题

查看防火墙是否有映射端口号

1
2
firewall-cmd --zone=public --list-ports
firewall-cmd --zone=docker --list-ports

添加策略对外打开指定的端口

1
2
firewall-cmd --zone=public --add-port=[端口号]/tcp --permanent
firewall-cmd --reload

查看 ip 转发有没有打开

net.ipv4.ip_forward = 1 表示打开,为 0 则表示没打开

1
2
3
4
5
6
7
8
9
10
11
sysctl net.ipv4.ip_forward
// echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf

// 网络重启
systemctl restart network.service

// 重启 docker 服务
systemctl restart docker

//
iptables --list|grep docker

关闭 ipv6 监听

1
2
// 查看服务器端口监听
netstat -nptl

参考

如何在 CentOS 7上安装和使用 Docker
利用 docker 将 web 项目部署到服务器
Linux 中 centos7 防火墙基本上使用
docker 网络模式
Docker 网络模式详解及容器间网络通信
Docker 镜像 import 与 save 的区别
centos 上禁用 ipv6 监听
Docker 镜像 import 与 save 的区别2