1.网络模式
需要做到两个容器相互通信,但是不采用ip地址方式,自定义网络,同一个自定义网络中,可以使用对方容器的容器名、服务名、网络别名来找到对方。这个时候帮助进行服务发现的是Docker 内置的DNS。所以,无论容器是否重启、更换IP,内置的DNS都能正确指定到对方的位置。
docker network create gtsb
docker run -d --name web1 --network gtsb paul:0918 #paul代表组名,0918代表版本号
docker run -d --name web2 --network gtsb paul:0918
docker container exec -it 6e2 /bin/bash #6e2代表容器ID前3位,用交互的模式进入容器
ping web2
2.容器运行后马上退出?
因为后台没输出,导致docker服务端认为容器以及运行结束。方法:可以用sshd拖起,docker -d + /usr/bin/sshd -D
容器只是进程。因此当执行 docker run 的时候,实际所做的只是启动一个进程,如果进程退出了,那么容器自然就终止了。
3.查看容器资源情况?
方法: docker stats + docker inspect
docker stats 98b #接容器前3位
docker inspect 98b #接容器前3名
- 集群下如何保持镜像的一致性?
方法: 在同一个机器build,然后分发到所有节点,确认是同样的id。Dockfile版本有git控制。
- 卷和挂载目录的区别?
卷 (Docker Volume) 是受控存储,是由 Docker 引擎进行管理维护的。因此使用卷,你可以不必处理 uid、SELinux 等各种权限问题,Docker 引擎在建立卷时会自动添加安全规则,以及根据挂载点调整权限。并且可以统一列表、添加、删除。另外,除了本地卷外,还支持网络卷、分布式卷。
而挂载目录那就没人管了,属于用户自行维护。你就必须手动处理所有权限问题。特别是在 CentOS 上,很多人碰到 Permission Denied,就是因为没有使用卷,而是挂载目录,而且还对 SELinux 安全权限一无所知导致。
docker run -it -v 宿主机目录:容器目录 镜像名 命令或者
docker run -it --mount type=bind,source=宿主目录,target=容器目录[,readonly] 镜像 命令
例子:
[root@database tmp]# docker run -d -p 8002:8000 --name dd --mount type=bind,source=/tmp,target=/tmp paul:0918
eb3588b6e22a1596046c8d379ecd35cfd06ce1d1acaf1d81327b3d5f7aa717b0
[root@database tmp]# ls
hsperfdata_confluence systemd-private-4d921f9829124622ac6e891e7688b7db-mariadb.service-KTW4Zq
systemd-private-4d921f9829124622ac6e891e7688b7db-chronyd.service-ZYlXbw
[root@database tmp]# docker container exec -it paul:0918 /bin/bash