docker
docker容器不保持任何数据
重要数据请使用外部卷存储(数据持久化)
容器可以挂载真实机目录或共享存储为卷
主机卷映射:
1
| docker run -it -v /var/data:/abc myos
|
1
| docker network create --subnet=172.18.0.0/16 mynet
|
- 使用自定义网络运行容器,再次重启时就不会按照启动顺序分配172.17.0.1网段的ip地址了
1
| docker run -itd --name vm --net bind --ip 172.18.0.103 centos /sbin/init
|
原文地址:https://cloud.tencent.com/developer/article/1966389
解决方案:迁移到 CentOS Stream 8 或替代发行版
1 2
| dnf --disablerepo '*' --enablerepo=extras swap centos-linux-repos centos-stream-repos dnf distro-sync
|
docker 桥接方式映射宿主机IP端口,并挂载宿主机文件卷,初始化容器环境,赋予最高操作权限
1
| docker run -itd --name goservice -p 41002:31002 -p 10989:9898 --privileged -v /root/hn_match_debug/:/root/hn_match_debug/ centos /sbin/init
|
注册mongod服务
mogod.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
bind_ip=0.0.0.0
port=27017
dbpath=/var/lib/mongo
logpath=/var/log/mongodb/mongod.log
logappend=true
|
mongod
进入 /etc/init.d/ 目录
# cd /etc/init.d/
创建并编辑mongodb文件
# vim mongodb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
MONGO_PATH=/usr/local/mongodb5/bin/mongod MONGO_PID=`ps -ef|grep 'mongod' | grep -v grep|awk '{print $2}'` test -x $MONGO_PATH || exit 0
case "$1" in start) ulimit -n 2000 echo "starting mongod server" $MONGO_PATH --fork --quiet -f /usr/local/mongodb5/mongod.conf echo "started mongod server" ;; stop) echo "stopping mongod server" if [ ! -z "$MONGO_PID" ]; then kill -15 $MONGO_PID fi echo "stopped mongod server" ;; status) ;; *) echo "usage: mongod {start|stop|status}" exit 1 esac
exit 0
|
上述文件配置完成后,执行一下几条命令
1 2 3
| # chmod +x /etc/init.d/mongod # chkconfig --add mongod # chkconfig mongod on
|
启动时去除ip绑定
1
| mongod --bind_ip 0.0.0.0
|
一:通过修改配置文件修改docker容器端口映射
1.使用docker ps -a命令找到要修改容器的CONTAINER ID
2.运行以下命令,进入该容器目录
1 2
| docker inspect【CONTAINER ID】| grep Id cd /var/lib/docker/containers
|
2.停止容器
3.停止主机docker服务
4.进入2得到的文件夹内,修改hostconfig.json 和 config.v2.json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| vi hostconfig.json
比如新增一个 80 端口,在PortBindings下边添加以下内容,端口配置之间用英文字符逗号隔开
"80/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "80" } ] 接着修改vi config.v2.json, 找到ExposedPorts和Ports 仿照之前内容添加端口映射 "ExposedPorts": { "2000/tcp": {} },
"Ports":{ "2000/tcp":[ { "HostIp": "0.0.0.0", "HostPort": "2000" } ] },
|
5.保存之后重启docker服务和容器
1 2
| systemctl start docker docker start [docker id]
|
二:把运行中的容器生成新的镜像,再新建容器
1.提交一个运行中的容器为镜像
1
| docker commit [containerid] [new_imagename]
|
2.运行新建的镜像并添加端口映射
1
| docker run -d -p 8000:80 [imagename] /bin/sh
|
三:修改主机iptables端口映射
docker的端口映射并不是在docker技术中实现的,而是通过宿主机的iptables来实现。通过控制网桥来做端口映射,类似路由器中设置路由端口映射。
如果我们有一个容器的8000端口映射到主机的9000端口,先查看iptabes设置了什么规则:
1
| sudo iptables -t nat -vnL
|
结果中有一条:
1 2 3 4
| Chain DOCKER (2 references) pkts bytes target prot opt in out source destination 98 5872 RETURN all -- docker0 * 0.0.0.0/0 0.0.0.0/0 237 14316 DNAT tcp -- !docker0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:9000 to:172.17.0.3:8000
|
我们可以看到docker创建了一个名为DOKCER的自定义的链条Chain。而我开放8000端口的容器的ip是172.17.0.3。
也可以通过inspect命令查看容器ip
1
| docker inspect [containerId] |grep IPAddress
|
我们想再增加一个端口映射,比如8081->81
,就在这个链条是再加一条规则:
1
| sudo iptables -t nat -A DOCKER -p tcp --dport 8081 -j DNAT --to-destination 172.17.0.3:81
|
加错了或者想修改:先显示行号查看
1
| sudo iptables -t nat -vnL DOCKER --line-number
|
删除规则3
1
| sudo iptables -t nat -D DOCKER 3
|