docker操作手册
离线安装docker:
下载地址:https://download.docker.com/linux/static/stable/x86_64/
选择合适的版本:本次选择( docker-19.03.10 )
上传并解压文件:
[root@docker home]# tar -zxvf docker-19.03.10.tgz
docker/
docker/ctr
docker/docker
docker/containerd
docker/docker-proxy
docker/runc
docker/docker-init
docker/containerd-shim
docker/dockerd
解压的docker文件夹全部移动至/usr/bin目录
cp -p docker/* /usr/bin
将docker注册为系统服务
在/usr/lib/systemd/system/目录下,创建docker.service文件
vi /usr/lib/systemd/system/docker.service
复制内容到docker.service中
[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.com
After=network.target docker.socket
[Service]
Type=notify
EnvironmentFile=-/run/flannel/docker
WorkingDirectory=/usr/local/bin
ExecStart=/usr/bin/dockerd \
-H tcp://0.0.0.0:4243 \
-H unix:///var/run/docker.sock \
--selinux-enabled=false \
--log-opt max-size=1g
ExecReload=/bin/kill -s HUP $MAINPID
#Having non-zero Limit*s causes performance problems due to accounting overhead
#in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
#Uncomment TasksMax if your systemd version supports it.
#Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
#set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
#kill only the docker process, not all processes in the cgroup
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
☆处理docker run 权限问题:
docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "process_linux.go:449: container init caused \"write /proc/self/attr/keycreate: permission denied\"": unknown.
关闭电脑的selinux
修改/etc/selinux/config文件中的SELINUX=“” 为 disabled ,然后重启。
不想重启就使用这条命令
setenforce 0
或者使用命令
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
重新加载配置文件
systemctl daemon-reload
启动docker
systemctl start docker
查看docker启动状态
systemctl status docker
查看docker版本
docker version
设置docker开机自启
systemctl enable docker
一、docker基础命令
1、搜索镜像 (OFFICIAL:代表官方发布)
docker search [镜像名称]
#例如:
[root@centos7 conf]# docker ps
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
redis Redis is an open source key-value store that… 12285 [OK]
redislabs/redisearch Redis With the RedisSearch module pre-loaded… 57
redislabs/redisinsight RedisInsight - The GUI for Redis 91
redislabs/rebloom A probablistic datatypes module for Redis 24 [OK]
redislabs/redis Clustered in-memory database engine compatib… 38
redis/redis-stack-server redis-stack-server installs a Redis server w… 54
redislabs/rejson RedisJSON - Enhanced JSON data type processi… 53
redis/redis-stack redis-stack installs a Redis server with add… 63
redislabs/redisgraph A graph database module for Redis 26 [OK]
redislabs/redismod An automated build of redismod - latest Redi… 41 [OK]
redislabs/redistimeseries A time series database module for Redis 12
redislabs/operator 7
redislabs/operator-internal This repository contains pre-released versio… 1
redislabs/redis-py 5
2、拉取镜像
docker pull [镜像名称]:[镜像版本]
3、查看镜像
docker images
docker images -a
#例如:
[root@centos7 conf]# docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest 7614ae9453d1 20 months ago 113MB
mongo latest dfda7a2cf273 20 months ago 693MB
查看镜像详细信息
详细信息中包含了镜像的版本,下载地址,配置路径等信息。
docker inspect [镜像ID]
4、删除镜像
docker rmi [镜像ID]
#例如:
[root@centos7 conf]# docker rmi dfda7a2cf273
5、启动容器
docker run -it \
--name redis_6379 \
--privileged \
-p 6379:6379 \
-v /home/software/redis/6379/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-v /home/software/redis/6379/data/:/data \
-v /home/software/redis/6379/log/redis.log:/var/log/redis.log \
-d redis
docker run [镜像名称] 配置说明:
参数 | 说明 |
---|---|
-it | 允许进入容器内部,使用“docker exec -it [容器名称] bash” 进入容器 |
–name | 指定容器名称 |
–privileged | 当值为true时,指定容器权限为root权限 |
–p | 指定容器内镜像的映射端口,例如:“6379:6379” , 前面的6379为主机的端口,后面的6379为容器内部的端口 |
–v | 指定容器内镜像文件的挂载地址,例如:“/home/software/redis/6379/conf/redis.conf:/usr/local/etc/redis/redis.conf” “:”前面的地址代表的是主机的文件路径,“:”后面的地址代表的是容器内部的文件路径 |
–d | 指定容器为后台运行 |
6、查看容器
docker ps
docker ps -a
#例如:
[root@centos7 conf]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4471b5c7a853 mongo "docker-entrypoint.s…" 10 minutes ago Up 10 minutes 0.0.0.0:27017->27017/tcp, :::27017->27017/tcp mongodb_27017
cfe1599ab134 redis "docker-entrypoint.s…" 28 minutes ago Up 28 minutes 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp redis_6379
6、查看容器日志
docker logs [容器名称]
#例如:
[root@docker conf]# docker logs redis_6379
1:C 15 Sep 2023 03:43:09.006 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
1:C 15 Sep 2023 03:43:09.006 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:C 15 Sep 2023 03:43:09.006 * Redis version=7.2.1, bits=64, commit=00000000, modified=0, pid=1, just started
1:C 15 Sep 2023 03:43:09.006 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
1:M 15 Sep 2023 03:43:09.007 * monotonic clock: POSIX clock_gettime
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 7.2.1 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 6379
| `-._ `._ / _.-' | PID: 1
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | https://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
1:M 15 Sep 2023 03:43:09.007 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
1:M 15 Sep 2023 03:43:09.009 * Server initialized
1:M 15 Sep 2023 03:43:09.009 * Ready to accept connections tcp
7、停止容器
docker stop [容器ID、容器名称]
8、删除容器
docker rm [容器ID、容器名称]
9、进入容器
docker exec -it [容器名称] bash
二、Linux基础命令
1、文件赋权
chmod 777 [文件]
#例如:
[root@centos7 log]# chmod 777 mongod.log/
2、查看文件目录结构
tree
#例如:
[root@centos7 software]# tree
.
├── mongodb
│ └── 27017
│ ├── conf
│ │ └── mongod.conf
│ ├── data
│ └── log
│ └── mongod.log
└── redis
└── 6379
├── conf
│ └── redis.conf
├── data
│ └── dump.rdb
└── log
└── redis.log
11 directories, 4 files
3、创建多层级文件
mkdir -p [文件路径] [文件路径]
#例如:
[root@centos7 software]# mkdir -p /home/software/redis/6379/log /home/software/redis/6379/data /home/software/redis/6379/conf
三、docker安装redis
1、创建挂载文件目录
cd /home
mkdir -p software/redis/6379/log software/redis/6379/data software/redis/6379/conf
查看创建结果
tree
2、docker拉取镜像
离线部署
下载redis压缩包
https://redis.io/download/#redis-downloads
查看并拉取镜像
#搜索镜像
docker search redis
#拉取镜像,未指定版本时,将自动拉取稳定版:last
docker pull redis
#查看镜像
docker images
docker images -a
3、配置文件映射
3.1、日志文件
在 software/redis/6379/log目录下,创建一个空的日志文件 redis.log。
[root@docker log]# touch redis.log
[root@docker log]# ls
redis.log
修改日志文件权限,将 redis.log 日志文件的权限设置为可读写。
chmod 777 redis.log
[root@docker log]# chmod 777 redis.log
[root@docker log]# ll
总用量 0
-rwxrwxrwx. 1 root root 0 9月 15 11:16 redis.log
3.2、配置文件
查看镜像信息
docker inspect [镜像ID]
[root@docker software]# docker inspect 39ac5829bade
在config、Env 里面可以看到redis镜像的版本信息:REDIS_VERSION=7.2.1
根据redis的版本下载配置文件,下载地址:https://redis.io/docs/management/config(已失效)
可以先下载对应版本的gz压缩包,再从压缩包里面取出配置文件。
上传配置文件 redis.conf 至 software/redis/6379/conf 目录下。
修改配置文件
进入文件夹编辑配置文件:
[root@docker conf]# cd /home/software/redis/6379/conf
[root@docker conf]# vim redis.conf
#修改IP访问权限:
注释掉 bind 127.0.0.1
#关闭保护模式:
protected-mode no
#指定容器中redis的日志路径:
logfile "/var/log/redis.log"
4、启动docker容器
docker run -it \
--name redis_6379 \
--privileged \
-p 6379:6379 \
-v /home/software/redis/6379/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-v /home/software/redis/6379/data/:/data \
-v /home/software/redis/6379/log/redis.log:/var/log/redis.log \
-d redis
5、查看启动结果
docker ps
#查看全部容器,包括启动失败的容器
docker ps -a
#删除容器或者镜像
docker rm [容器ID、容器名称、镜像ID]
#进入容器
docker exec -it [容器名称] bash
6、检查日志
docker logs redis_6379
这里表示redis启动成功。
7、测试 Redis
#进入容器
docker exec -it redis_6379 bash
#运行 redis 客户端
redis-cli
#测试
ping
#测试结果
[root@docker conf]# docker exec -it redis_6379 bash
root@81eb6c3c8d0a:/data# redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379>
显示 PONG 代表测试成功!
四、docker安装MongoDB
docker run --name mongodb_27017 \
-p 27017:27017 \
-v /home/software/mongodb/27017/conf/mongod.conf:/etc/mongod.conf \
-v /home/software/mongodb/27017/data:/var/lib/mongodb \
-v /home/software/mongodb/27017/log/mongod.log:/var/log/mongodb/mongod.log \
-d \
mongo \
--auth