1
sudo yum install  docker-ce-18.09.9 docker-ce-cli-18.09.9 containerd.io
1
2
3
#进入DOCKER容器
docker exec -it d497dcfd6062 /bin/bash(这里也可以直接用 bash)或者下面都行
docker exec -it baota /bin/bash
1
2
3
#启动 FRPS服务器
docker run -itd --restart=always --name="ssfrps" --net=host alpine
docker run -itd -p 7777:7777 -p 3399:3399 --name frps frps nohup /home/frp/frps -c /home/frp/frps.ini > /dev/null 2>&1 &
1
2
3
4
5
6
#创建自定义网络
docker network create --subnet=172.18.0.0/16 webserver

docker network ls
#查询IP
docker inspect #容器name或者id |grep IPAddress
1
2
# 启动nginx服务器
docker run -itd --restart=always --name nginx --net webserver --ip 172.18.0.2 -p 80:80 -p 443:443 nginx:latest
1
2
# 启动webserver服务器
docker run -itd --restart=always --name webserver --net webserver --ip 172.18.0.3 -p 80:80 -p 443:443 -v /www:/www --privileged=true webserver:20220116
1
2
# 启动mysql
docker run -itd --restart=always --name mysql --net webserver --ip 172.18.0.8 -p 3306:3306 -v /mysqldata:/var/lib/mysql --privileged=true mysql:20220116
1
2
3
# 启动宝塔服务
docker run -itd --name btserver --net webserver --ip 172.18.0.2 --restart=always -p 20:20 -p 21:21 -p 81:80 -p 444:443 -p 888:888 -p 8888:8888 --privileged=true btserver:latest /usr/sbin/init

1
2
3
4
#启动git服务
docker run -itd --restart=always --name gitserver --net webserver --ip 172.18.0.5 -p 23:22 -v /www:/www gitserver:20211217

/usr/sbin/sshd -D &
1
2
3
4
5
6
7
8
9
#启动FRPC服务
docker run -itd --restart=always --name frpc --net webserver --ip 172.18.0.4 frpc:20211217 /sbin/init nohup /home/frpc -c /home/frpc.ini > /dev/null 2>&1 &

docker run -itd --restart=always --name frpc --link btserver:btserver frpc:gsbtfrpc /usr/sbin/init nohup /home/frpc -c /home/frpc.ini > /dev/null 2>&1 &

#启动命令
nohup ./frps -c ./frps.ini > /dev/null 2>&1 &

nohup /usr/bin/ss-server -s 47.243.195.230 -p 9030 -k a@111111 -m aes-256-gcm -d 8.8.8.8 -u > /dev/null 2>&1 &
1
2
3
# 虚拟机重启后服务
mkdir /sys/fs/cgroup/systemd
mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd
1
2
# 启动kuboard
docker run -d --restart=unless-stopped --name=kuboard -p 1080:80/tcp -p 10081:10081/udp -p 10081:10081/tcp -e KUBOARD_ENDPOINT="http://192.168.99.100" -e KUBOARD_AGENT_SERVER_UDP_PORT="10081" -e KUBOARD_AGENT_SERVER_TCP_PORT="10081" swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard:v3.3.0.3
1
2
#启动 SS 服务
docker run -e PASSWORD=a@111111 -p 9030:8388 -p 9030:8388/udp -d shadowsocks/shadowsocks-libev

docker 普通命令

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
 1 docker ps                 # 仅列出当前运行的容器
2 docker ps -l # 列出最新创建得容器
3 docker ps -a # 列出素有容器(包括 未运行的)
4 docker inspect web4 # 列出指定容器的详细信息
5
6 #### 持久化容器
7
8 docker exec -it web4 bash # 进入容器web4中
9 touch 1.txt 2.txt # 对容器进行修改
10 docker commit web4 nginx:web4 # 将修改后的web4容器提交为一个新镜像 nginx:web4
11 docker images # 可以看到 多了一个 TAG标记为 web4 的镜像
12 docker run -d --name web4-1 nginx:web4 # 使用刚刚提交的镜像web4创建一个容器web4-1
13 docker exec -it web4-1 bash # 进入web4-1的bash环境
14
15 #### 从宿主机复制文件到docker容器
16 docker cp nginx.tar web4-1:/home # 将宿主机nginx.tar文件拷贝到容器web4-1的/home目录中
17 docker exec -it web4-1 ls /home # 在容器web4-1中执行 "ls /home" 命令
18
19 #### 容器常用查询命令
20 docker logs web4-1 # 查看web4-1中控制台日志
21 docker port 55f870061ed9 # 查看指定容器端口映射
22 docker top 00f7ddc96622 # 查看容器中有哪些进程
23 docker stats 00f7ddc96622 # 查看容器资源使用情况
24
25 ##### 启动、停止、删除 容器
26 docker ps -a # 列出素有容器(包括 未运行的)
27 docker start web # 启动容器web      
28 docker stop web # 停止容器web
29 docker rm web # 删除容器web

2. 镜像常用命令

1
2
3
4
5
6
7
1 [root@linux-node4 diff]# docker help                           # 查看docker帮助
2 [root@linux-node4 diff]# docker image --help # 查看 docker中 镜像相关帮助
3 [root@linux-node4 diff]# docker image ls # 查看当前所有镜像
4 [root@linux-node4 diff]# docker image inspect nginx # 查看指定镜像(nginx镜像)详细信息
5 [root@linux-node4 diff]# docker pull nginx:1.14 # 下载指定版本镜像 nginx
6 [root@linux-node4 diff]# docker image rm nginx:1.14 # 删除nginx 1.14版本
7 [root@linux-node4 diff]# docker image save nginx > nginx.tar # 导出niginx镜像

Docker run 常用参数详解
命令格式:docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
Usage: Run a command in a new container
中文意思为:通过run命令创建一个新的容器(container)

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
37
38
39
40
41
42
43
44
45
46
47
常用选项说明
-d, --detach=false, 指定容器运行于前台还是后台,默认为false
-i, --interactive=false, 打开STDIN,用于控制台交互
-t, --tty=false, 分配tty设备,该可以支持终端登录,默认为false
-u, --user="", 指定容器的用户
-a, --attach=[], 登录容器(必须是以docker run -d启动的容器)
-w, --workdir="", 指定容器的工作目录
-c, --cpu-shares=0, 设置容器CPU权重,在CPU共享场景使用
-e, --env=[], 指定环境变量,容器中可以使用该环境变量
-m, --memory="", 指定容器的内存上限
-P, --publish-all=false, 指定容器暴露的端口
-p, --publish=[], 指定容器暴露的端口
-h, --hostname="", 指定容器的主机名
-v, --volume=[], 给容器挂载存储卷,挂载到容器的某个目录
--volumes-from=[], 给容器挂载其他容器上的卷,挂载到容器的某个目录
--cap-add=[], 添加权限,权限清单详见:http://linux.die.net/man/7/capabilities
--cap-drop=[], 删除权限,权限清单详见:http://linux.die.net/man/7/capabilities
--cidfile="", 运行容器后,在指定文件中写入容器PID值,一种典型的监控系统用法
--cpuset="", 设置容器可以使用哪些CPU,此参数可以用来容器独占CPU
--device=[], 添加主机设备给容器,相当于设备直通
--dns=[], 指定容器的dns服务器
--dns-search=[], 指定容器的dns搜索域名,写入到容器的/etc/resolv.conf文件
--entrypoint="", 覆盖image的入口点
--env-file=[], 指定环境变量文件,文件格式为每行一个环境变量
--expose=[], 指定容器暴露的端口,即修改镜像的暴露端口
--link=[], 指定容器间的关联,使用其他容器的IP、env等信息
--lxc-conf=[], 指定容器的配置文件,只有在指定--exec-driver=lxc时使用
--name="", 指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字
--net="bridge", 容器网络设置:
bridge 使用docker daemon指定的网桥
host //容器使用主机的网络
container:NAME_or_ID >//使用其他容器的网路,共享IP和PORT等网络资源
none 容器使用自己的网络(类似--net=bridge),但是不进行配置
--privileged=false, 指定容器是否为特权容器,特权容器拥有所有的capabilities
--restart="no", 指定容器停止后的重启策略:
no:容器退出时不重启
on-failure:容器故障退出(返回值非零)时重启
always:容器退出时总是重启
--rm=false, 指定容器停止后自动删除容器(不支持以docker run -d启动的容器)
--sig-proxy=true, 设置由代理接受并处理信号,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理
示例
运行一个在后台执行的容器,同时,还能用控制台管理:docker run -i -t -d ubuntu:latest
运行一个带命令在后台不断执行的容器,不直接展示容器内部信息:docker run -d ubuntu:latest ping www.docker.com
运行一个在后台不断执行的容器,同时带有命令,程序被终止后还能重启继续跑,还能用控制台管理,docker run -d --restart=always ubuntu:latest ping www.docker.com
为容器指定一个名字,docker run -d --name=ubuntu_server ubuntu:latest
容器暴露80端口,并指定宿主机80端口与其通信(: 之前是宿主机端口,之后是容器需暴露的端口),docker run -d --name=ubuntu_server -p 80:80 ubuntu:latest
指定容器内目录与宿主机目录共享(: 之前是宿主机文件夹,之后是容器需共享的文件夹),docker run -d --name=ubuntu_server -v /etc/www:/var/www ubuntu:latest

3. 运行容器常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@linux-node4 ]# docker run --help                              # 查看创建容器帮助
[root@linux-node4 ]# docker run -it centos # 创建centos镜像并进入终端
[root@linux-node4 ]# docker run -d nginx # 后台启动nginx容器
[root@linux-node4 ]# docker stop 6bb09dce461f # 关闭一个容器
[root@linux-node4 ]# docker ps -l # 查看最近运行的容器
[root@linux-node4 ]# docker run -itd centos # 启用一个伪终端守护centos容器
[root@linux-node4 ]# docker container run -d --name web3 -e test=123456 -p 8800:80 -h webhostname --restart always nginx
-d # 后台启动nginx容器
--name web3 # 自定义容器名字(默认会是一段随机字符串)
-e test=123456 # 启动容器添加变量 test=123456 (echo $test)
-p 8800:80 # 宿主机的8800端口映射到docker容器的80端口中
-h webhostname # docker容器主机名 (a300f394af88)
--restart always # 宿主机重启自动拉起这个docker容器
nginx # 使用这个nginx镜像启动容器
注:http://192.168.56.12:8800/ 访问这个docker nginx
[root@linux-node4 ]# docker logs web # 查看上面启动的web容器的日志
[root@linux-node4 ]# docker exec -it web bash # 进入容器web
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 1 [root@linux-node1 /]# docker run -itd nginx          # 在后台启动一个docker容器
2 [root@linux-node1 /]# docker inspect 5a3ad030a621 # 查看docker运行容器的详细信息
3 [root@linux-node1 /]# curl http://172.17.0.2 #
4 [root@linux-node1 /]# docker run -itd --name=web2 -p 192.168.56.11:8800:80 nginx
5 使用--itd参数(指定后台启动这个容器),--name=web2(指定这个web容器的名字叫web2)
6
7
8 -d: 后台运行容器,并返回容器ID;
9 -i: 以交互模式运行容器,通常与 -t 同时使用;
10 -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
11 -P: 随机端口映射,容器内部端口随机映射到主机的高端口
12 -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
13 --name="nginx-lb": 为容器指定一个名称
14 --dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
15 [root@linux-node1 /]# docker exec -it c9b7a480ee68 bash # 进入docker环境

停止运行容器,删除运行容器,删除镜像

1
2
3
4
5
6
7
8
# 停止容器运行(CONTAINER ID)
docker stop 容器ID

# 删除 容器(CONTAINER ID)
docker rm 容器ID

# 删除 镜像(IMAGE ID)
docker images 镜像ID