Docker容器技术绝对是运营同学的福音,不需要重复在安装系统、业务,构建环境等体力活间消耗宝贵的青春!
1、安装docker;
在线安装:curl -fsSL https://get.docker.com/ | sh
2、配置docker镜像包和容器存储所在的路径,否则到后面突然发现容器空间不够了就麻烦了,修改方法网上有多种,以centos系统为例,建议是直接添加一个daemon.json配置文件进行修改:
[root@abc~]# cat /etc/docker/daemon.json
{
"graph": "/mnt/docker/data", //路径配置为你系统内中磁盘空间最大的路径
}
[root@abc~]#
更新:2022-0913,上面的方法如果不好使,可以试试下面的方法:
1、修改docker.service文件,使用-g参数指定存储位置 vi /usr/lib/systemd/system/docker.service ExecStart=/usr/bin/dockerd --graph /新path/docker 2、reload配置文件 systemctl daemon-reload 3、重启docker systemctl restart docker.service 4、查看 Docker Root Dir: /var/lib/docker 是否改成设定的目录 /新-path/docker docker info
3、搜索你需要的基础镜像包,然后安装:
[root@abc data]# docker search centos
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 5911 [OK]
安装:docker pull centos
安装完成后使用 docker images查看该镜像:
REPOSITORY TAG IMAGE ID CREATED SIZE
kecikeci/centos7.2-tools latest 7e7d21d26e64 22 months ago 584MB
删除镜像:
[root@izwz9it79rawg1924174lkz ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
zulip/docker-zulip latest 00da4620a549 6 weeks ago 1.58GB
[root@izwz9it79rawg1924174lkz ~]# docker rmi 00da4620a549
4、创建容器,启动镜像:
> 准备好网络
docker network ls 查看网络,默认只有bridge、host、none三种网桥,创建容器时默认使用bridge
创建自定义IP段和子网掩码的网桥
docker network create --subnet=172.72.0.0/24 mynetwork
> 运行
docker run -d --net mynetwork --ip 172.72.0.2 -p 50001:22 -p 443:443 -p 5060:5060 -p 80:80 -p 8081:8081 --name ov500 -ti 7e7d21d26e64
使用 docker ps检查启动状态:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d2d152ebe6fe 7e7d21d26e64 "/usr/sbin/sshd -D" 56 seconds ago Up 55 seconds 0.0.0.0:50001->22/tcp ov500
进入该容器后修改root的初始密码:
docker exec -i ov500 /bin/sh or docker exec -it ov500 /bin/bash
passwd root #修改root的,默认密码
5、使用当前ip和50001端口远程连接到你的镜像;
6、重新启停容器;
docker start ov500
docker stop ov500
docker restart ov500
停止所有容器:docker stop $(docker ps -q)
$ docker ps // 查看所有正在运行容器
$ docker stop containerId // containerId 是容器的ID
$ docker ps -a // 查看所有容器
$ docker ps -a -q // 查看所有容器ID
$ docker stop $(docker ps -a -q) // stop停止所有容器
$ docker rm $(docker ps -a -q) // remove删除所有容器
7、删除所有容器;
docker container rm $(docker ps -aq)
8、将容器打包成本地镜像,后续可以作为环境包输出使用;
docker commit -m "package container to image." -a "john" d2d152ebe6fe john-centos:7.2
解释:docker commit -m "[镜像描述]" -a "[作者]" [容器ID] [镜像名称]:[镜像tag]
9、docker中无法使用 systemd(systemctl) 相关命令的原因是 1号进程不是 init ,而是其他例如 /bin/bash ,所以导致缺少相关文件无法运行。(System has not been booted with systemd as init system (PID 1). Can't operat),以特权模式启动,支持运行systemctl服务:
CentOS的容器:
# docker run -d -name centos7 --privileged=true centos:7 /usr/sbin/init
进入容器:
# docker exec -it centos7 /bin/bash
这样可以使用systemctl启动服务了。
Ubuntu的容器:
docker run -tid --name test --privileged=true ubuntu:18.04 /sbin/init
docker exec -it test /bin/bash
PS:--privilaged=true一定要加上的。
-- 2020.11.17更新:
将服务器中日志目录、相关存储路径映射为本地目录,否则会出现容器空间占满的情况,具体是在docker run命令后面增加一个-v 命令, -v 本地路径:容器内的目标路径 ,如下:
docker run -d -p 50099:22 -p 1935:1935 -p 2935:2935 -p 8091:8091 -p 8090:8090 -p 7443:7443 -p 8554:554 -p 322:322 -p 10000:10000 -p 10000:10000/udp --name mediaserver -v /home/docker/mediaserver/record:/opt/mediaserver/www --privileged=true mediaserver:v4 /usr/sbin/init
--2021.08.27更新:
配置容器最大使用空间
[root@localhost work]# docker run -d -p 10099:22 --name byd_build -v /home/test/work/:/mnt/work --privileged=true ubuntu_14.04_build_v2 "/sbin/init" --storage-opt size=100G
bf16960764af9415f57d2aff27842e47cfc095e334c26dcfe90820b457fd9e2b
--2022.03.08更新:
增加UDP端口和UDP端口池映射命令:
docker run -d -p 10100:22 -p 5060:5060 -p 5061:5061 -p 5067:5067 -p 5060:5060/udp -p 5061:5061/udp -p 5067:5067/udp -p 49000-49900:49000-49900/udp --name freeswitch_run_v30 -v /home/lyz/work:/mnt/work --privileged=true freeswitch_v30:v3 "/usr/sbin/init" --storage-opt size=100G
映射49000-49900/udp的端口
10、修改容器启动命令:
docker container update --privileged=true 容器名字
报错:Docker 启动时报错:iptables:No chain/target/match by the name ;要解决这个问题,只要重启docker服务,之后,正确的iptables规则就会被创建出来
11、给docker容器配置固定IP,需要将宿主机网卡配置为网桥模式,然后给容器配置和宿主机同网段的ip,详细可以baidu参考使用pipework给容器配固定ip;
pipework br0 ov500_fs1 11.12.117.201/20@11.12.117.68
12、复制镜像和复制容器都是通过保存为新镜像而进行的。
具体为:
保存镜像
docker save ID > xxx.tar
docker load < xxx.tar
保存容器
docker export ID >xxx.tar
docker import xxx.tar containr:v1
然后再docker run -it containr:v1 bash
使用 docker save 命令根据 ID 将镜像保存成一个文件。
1 | docker save 0fdf2b4c26d3 > hangge_server.tar |
还可以同时将多个 image 打包成一个文件,比如下面将镜像库中的 postgres 和 mongo 打包:
1 | docker save -o images.tar postgres:9.6 mongo:3.4 |
13. docker-composer的安装与使用:
- sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
- pip install docker-compose
理解docker-compose.yml的结构,使用下面的命令启动或停止;
$ sudo docker-compose up -d
$ sudo docker-compose -f ./compose/docker-compose.yml -p myapp up -d
$ sudo docker-compose down
-------------------广告线---------------
项目、合作,欢迎勾搭,邮箱:promall@qq.com
本文为呱牛笔记原创文章,转载无需和我联系,但请注明来自呱牛笔记 ,it3q.com