Docker相关知识与命令
安装docker,
1.先卸载机器之前的docker相关组件
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2.安装需要的包
sudo yum install -y yum-utils
3.设置国内阿里的镜像仓库
sudo yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4.更新yum的软件包索引
yum makecache fast
4.安装docker相关组件 docke-ce 是社区版本
sudo yum -y install docker-ce docker-ce-cli containerd.io docker-compose-plugin
5.启动Docker 引擎并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
6.验证安装是否成功
docker run hello-world
如果一切正常,就是如下图
docker search 镜像名字 #搜索镜像
docker pull 镜像名字 #下载镜像
容器命令
docker run 【可选参数】 image
--name="Name” 容器名字
-d 后台方式运行
-it 使用交互方式进行,进入容器查看内容
-p 指定容器的端口 -p 8080:8080
-p 主机端口:容器端口 (常用)
-P 随机指定端口
docker ps 命令
#列出当前正在运行的容器
-a #列出当前正在运行的的容器+带出历史运行过的容器
删除容器
docker rm 容器id #删除指定的容器,不能删除正在运行的容器,如果要强制删除 rm -f
docker rm -f $(docker ps -aq) #删除所有的容器
docker ps -a -q |xargs docker rm #删除所有的容器
docker logs 容器id
-tf #显示日志
--tail number #要显示的日志条数
docker inspect 容器id #查看镜像的元数据
进入当前正在运行的容器
docker exec -it 容器id bashshell #进入容器后开启一个新的终端,可以在里面操作
docker attach 容器id #进入容器正在运行的终端,不会启动新的进程
docker stats #查看当前正在运行的容器使用cpu、内存等状态
docker top 容器id #查看容器内部的运行进程
commit 镜像
#命令和git原理类似
docker commit -m="提交的描述描述信息" -a="作者" 容器id 目标镜像名: [TAG]
具名和匿名挂载
-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载
-v /宿主机路径::容器内路径 #指定路径挂载
#匿名挂载 -v 容器内路径
docker run -d -P --name nginx01 -v /etc/nginx nginx
root@# docker volume ls
DRIVER VOLUME NAME
local 8938cbf4bd600fead15f20c3fcd51cd25d8a3ce0fd4815494d1e94efb332c125
#具名挂载
docker run -d -P --name nginx04 -v tang-nginx:/etc/nginx nginx
root@# docker volume ls
DRIVER VOLUME NAME
local 8938cbf4bd600fead15f20c3fcd51cd25d8a3ce0fd4815494d1e94efb332c125
local tang-nginx
Dockerfile
Dockerfile的指令
FROM # 基础镜像,一切从这里开始构建
MAINTAINER # 镜像是谁写的,姓名+邮箱
RUN # 镜像构建的时候需要运行的命令
ADD # 将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包
WORKDIR # 镜像的工作目录
VOLUME # 挂载的目录
EXPOSE # 保留端口配置
CMD # 指定这个容器启动的时候要运行的命令;一个Dockerfile中可以有多个CMD指令,只有最后一个会生效,CMD会被docker run 之后的参数替换
ENTRYPOINT # 类似于CMD指令,但是ENTRYPOINT不会被docker run后面的命令覆盖,
ONBUILD # 当构建一个被继承 DockerFile 这个时候就会运行 ONBUILD 的指令。触发指令
COPY # 类似ADD ,将我们文件拷贝到镜像中
ENV # 构建的时候设置环境变量!
小结:
虚悬镜像
- 仓库名、标签都是<none>的镜像,俗称dangling image
查看 docker image ls -f dangling=true
删除 docker image prune
虚悬镜像已经失去存在的价值 , 可以删除
网络连通
docker network connect [OPTIONS] NETWORK CONTAINER
实战部署下Redis集群
用shell批量安装6台redis
docker network create redis --subnet 172.28.0.0/16
for port in $(seq 1 6);\
do \
mkdir -p /mydata/redis/node-${port}/conf
mkdir -p /mydata/redis/node-${port}/data
touch /mydata/redis/node-${port}/conf/redis.conf
cat << EOF >/mydata/redis/node-${port}/conf/redis.conf
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.28.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done
for port in $(seq 1 6);\
do \
docker run -p 637${port}:6379 -p 1637${port}:16379 --name redis-${port} \
-v /mydata/redis/node-${port}/data:/data \
-v /mydata/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.28.0.1${port} redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
done
docker run -p 6371:6379 -p 16371:16379 --name redis-1 \
-v /mydata/redis/node-1/data:/data \
-v /mydata/redis/node-1/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.28.0.11 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
安装ok后 ,随机进入一个容器,
root@/# docker exec -it redis-1 /bin/sh
创建redis集群
/data # redis-cli --cluster create 172.28.0.11:6379 172.28.0.12:6379 172.28.0.13:6379 172.28.0.14:6379 172.28.0.15:6379 1
72.28.0.16:6379 --cluster-replicas 1