docker 命令汇集
- 部署docker
安装依赖
# Install required packages. yum-utils provides the yum-config-manager utility, and device-mapper-persistent-data and lvm2 are required by the devicemapper storage driver.
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
使用阿里源:
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装docker-ce
yum install docker-ce
1,查看容器
docker ps [-a] #-a表示全全部否者仅显示运行的
2,登录容器
docker exec -it [containerId] /bin/bash
docker exec -it [containerId] bash
docker exec -it [containerId] /bin/sh
3,启动所有的容器
docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)
4,停用全部运行中的容器
docker stop $(docker ps -q) #正常停止
docker kill $(docker ps -q) #强行杀掉
5,删除全部容器
docker rm $(docker ps -aq)
docker rm $(docker ps -a | awk '{ print $1}' | tail -n +2)
6,一条命令实现停用并删除容器:
docker stop $(docker ps -q) & docker rm $(docker ps -aq)
7,查看镜像
docker images
8,删除镜像
docker rmi [imageId]
9,docker 批量删除无tag镜像
docker rmi $(docker images|grep none|awk '{print $3}')
10,删除全部image
docker rmi $(docker images -q)
11,删除镜像名称中包含“ejiyuan”的镜像
docker rmi --force $(docker images | grep ejiyuan | awk '{print $3}')
12,删除所有未打 ejiyuan 标签的镜像
docker rmi $(docker images -q -f ejiyuan=true)
13,查看日志
docker logs -f -t --since="2017-05-31" --tail=10 web # --since : 此参数指定了输出日志开始日期,即只输出指定日期之后的日志,-f : 查看实时日志, -t : 查看日志产生的日期, -tail: 查看最后的10条日志,web: 容器名称或容器id
docker logs --since 30m CONTAINER_ID # 查看最近30分钟的日志
docker logs -t --since="2021-08-18T11:46:37" --tail=100 CONTAINER_ID # 查看某时间之后最新的100条日志
docker logs -t --since="2021-08-18T11:46:37" --until "2021-08-18T11:47:37" CONTAINER_ID # 查看某时间段日志
docker logs CONTAINER_ID | grep -10 'error' # 打印匹配行的前后10行
docker logs CONTAINER_ID | grep -C 10 'error' # 打印匹配行的前后10行
docker logs CONTAINER_ID | grep -A 10 -B 10 'error' # 打印匹配行的前后10行
docker logs CONTAINER_ID | grep -A 10 'error' # 打印匹配行的后10行
docker logs CONTAINER_ID | grep -B 10 'error' # 打印匹配行的前10行
14,删除日志
docker ps -a
docker inspect [container_ID] | grep json.log
>/var/lib/docker/containers/[container_ID]be01e3c7e68f0e56d6450413ae1fe49ec94f1c72c8bf779e580e/[container_ID]be01e3c7e68f0e56d6450413ae1fe49ec94f1c72c8bf779e580e-json.log
15,加入网路
# 先创建一个网络
docker network create testnet
# 查看Docker网络
docker network ls
#加入网络
docker run -it --name centos-1 --network testnet --network-alias centos-1 docker.io/centos:latest
docker run -it --name centos-2 --network testnet --network-alias centos-2 docker.io/centos:latest
#测试网络,容器centos-1与centos-2可互相通信,进入容器 centos-1
ping centos-2
16,设置自动重启
#创建时
docker run -d -p 8086:8086 --restart=always --name influxdb influxdb:latest
#已启动
docker update --restart=always 容器ID(或者容器名)
#开机自动启动docker
systemctl enable docker
--restart 策略
命令 作用备注
no 默认策略,在容器退出时不重启容器
on-failure 在容器非正常退出时(退出状态非0),才会重启容器
on-failure:3 在容器非正常退出时重启容器,最多重启3次
always 在容器退出时总是重启容器
unless-stopped 在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
17,修改信息
docker rename distracted_cori docserver # 修改容器distracted_cori 名称为 docserver
18,docker启动redis并设置密码
docker run -d --name myredis -p 6379:6379 redis --requirepass "mypassword"
19,登录到docker redis
docker exec -it redis_s redis-cli -h 192.168.1.100 -p 6379 -a your_password //如果有密码 使用 -a参数
192.168.1.100:6379>
20,安装RabbitMQ
docker run -id --name=rabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 15671:15671 -p 15672:15672 -p 25672:25672 -e RABBITMQ_DEFAULT_USER=root -e RABBITMQ_DEFAULT_PASS=St123456 rabbitmq:management
#15672:管理界面ui使用的端口
#15671:管理监听端口
#5672、5671:AMQP 0-9-1 without and with TLSclient端通信口
#4369:(epmd)epmd代表 Erlang端口映射守护进程,erlang发现口
#25672:( Erlang distribution) server间内部通信口
21,启动 H2
docker run -d -p 1521:1521 -p 81:81 -v /path/to/local/data_dir:/opt/h2-data --name=MyH2Instance oscarfonts/h2
#查看日志 docker logs -f MyH2Instance
#登录初始化 http://192.168.99.100:81/
22,启动mariadb
docker run --name my-mariadb -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mariadb:tag
23,启动mysql
docker run -itd -p 3306:3306 -v /data/mysql/conf:/etc/mysql/conf.d -v /usr/local/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=st123456 mysql --secure-file-priv='var/lib/mysql'
24,启动postgres
docker run --name my_postgres -d -p 5432:5432 -e POSTGRES_PASSWORD=123456 -e PGDATA=/data/ -e POSTGRES_USER=admin -e POSTGRES_DB=my_db postgres
25,启动maxscale
docker run -d --name mxs -p 8989:8989 -p 3306:3306 -v /data/maxscale/maxscale.cnf:/etc/maxscale.cnf.d mariadb/maxscale:latest
# curl -u admin:mariadb http://localhost:8989/v1/maxscale
# docker exec -it mxs bash
26,ss
docker run -e PASSWORD=<password> -p<server-port>:8388 -p<server-port>:8388/udp -d shad偶wsocks/shad偶wsocks-libe
27,ipsec-vpn-server
docker run \
--name ipsec-vpn-server \
--env-file ./vpn.env \
--restart=always \
-v ikev2-vpn-data:/etc/ipsec.d \
-v /lib/modules:/lib/modules:ro \
-p 500:500/udp \
-p 4500:4500/udp \
-d --privileged \
hwdsl2/ipsec-vpn-server
28,mongoDB
# 创建服务
docker run -itd --name mongo -v /data/volume/mongodb/data:/data/db -p 27017:27017 mongo:4.4 --auth
# 登录到admin库
docker exec -it mongo mongo admin
# 设置用户名密码
db.createUser({ user:'root',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},'readWriteAnyDatabase']});
# [user:'root']:设置用户名为root
# [pwd:'123456']:设置密码为123456
# [role:'userAdminAnyDatabase']:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
# [db:'admin']:可操作的数据库
# [‘readWriteAnyDatabase’]:赋予用户读写权限
# 连接mongo数据库
db.auth('root', '123456')
# 测试数据库,插入一条语句
db.user.insert({"name":"zhangsan","age":18})
# 测试数据库,查询刚才插入的语句
db.user.find()
# 参考 https://blog.csdn.net/packge/article/details/126539320
29,NextCloud
docker run -d -p 8080:80 -v /data/nextcloud:/var/www/html nextcloud:latest
30,minio
docker run --name minio --env MINIO_ROOT_USER="admin" --env MINIO_ROOT_PASSWORD="admin123" -p 9000:9000 -p 9001:9001 -v /data/minio:/bitnami/minio/data bitnami/minio:latest
31,navidrome
docker run -d --name navidrome --restart=unless-stopped -v /data/navidrome/music:/music -v /data/navidrome/data:/data -p 4533:4533 -e ND_LOGLEVEL=info deluan/navidrome:latest
32,Jellyfin
docker run -d -p 8096:8096 -p 8920:8920 -p 7359:7359/udp -p 1900:1900/udp -v /home/data/jellyfin/config:/config -v /home/data/jellyfin/cache:/cache -v /home/data/jellyfin/media:/media -e TZ=Asia/Shanghai -e PUID=0 -e PGID=0 \
--device=/dev/dri:/dev/dri \
--add-host=api.themoviedb.org:65.8.161.37 \
--add-host=api.themoviedb.org:65.8.161.83 \
--add-host=api.themoviedb.org:65.8.161.126 \
--add-host=api.themoviedb.org:65.8.161.111 \
--add-host=image.tmdb.org:169.150.249.162 \
--add-host=image.tmdb.org:138.199.37.230 \
--add-host=image.tmdb.org:108.138.246.49 \
--add-host=api.thetvdb.org:192.241.234.54 \
--add-host=api.thetvdb.org:13.225.89.239 \
--restart unless-stopped --name=Jellyfin jellyfin/jellyfin:latest
#如果使用 linuxserver/jellyfin 镜像,就把最后一行替换为下行
lscr.io/linuxserver/jellyfin:latest
#如果使用 nyanmisaka/jellyfin 镜像,最把最后一行替换为下行
nyanmisaka/jellyfin:latest
33,build指定平台
docker buildx build --platform linux/amd64,linux/arm64 -t registry.cn-beijing.aliyuncs.com/ejiyuan/com.yss.mall:latest .
34,拉取运行指定平台
docker run -d -p 8085:80 --platform linux/amd64 registry.cn-beijing.aliyuncs.com/ejiyuan/com.yss.mall
35,服务器之间文件传输
scp /etc/share/test.js root@123.123.123.123:/opt/soft/test.js
36,进程最大打开文件描述符数
docker 因运存不足无法给进程分配更多的文件句柄数而异常退出,运行时报错“unable to allocate file descriptor table - out of memorylibrary initialization failed”
据说仅jdk8会出现
解决方案1:启动时加入 “ --ulimit nofile=1024”
docker run --ulimit nofile=1024 -d -p 8080:8080 docker-test:v1.0
解决方案2:#修改/lib/systemd/system/docker.service文件
LimitCORE=65535
LimitNOFILE=65535
LimitNPROC=65535
systemctl daemon-reload
systemctl restart docker
PS.参考