Docker学习总结

154 阅读1分钟

总图例

image.png

命令总结

1.查看所有镜像:
  docker images 

2.查看当前运行的容器: 
  docker ps 

3.查看当前服务器中所有运行过的容器: 
  docker ps -a 

4.运行容器: 
  docker run [options]  镜像id/镜像名  [command]  

    [options]  :  --name 容器名
                  -d  后台运行
                  -it 交互模式运行, 若无此参数, 容器不能在后台运行时维持
                  -p  指定端口
                  -P  随机指定端口
                  -v  挂载容器卷 
                  --net docker0/mynet 挂载网络
                  
    [command]  :  /bin/bash 控制台
                  /bin/sh  命令行
                  ...

5.进入正在后台运行的容器
  docker exec -it 容器id/容器名
  
6.进入正在后台运行的容器的命令行
  docker attach 容器id/容器名
  
7.dockerHub 搜索镜像
  docker search name(mysql)
  
8.拉取镜像
  docker pull name(redis)
  
9.退出容器
  exit  如果是后台运行,则维持容器状态,前台运行则停止容器
  ctrl+p+q  就算前台运行也可以保持状态
  
10.改变容器状态
  docker start/stop/kill/restart
  
11.查看容器信息
  docker inspect 容器id/容器名
  
12.查看容器进程
  docker top 容器id/容器名
  
13.删除容器
  docker rm 容器id/容器名
  
14.删除镜像
  docker rmi 镜像id/镜像名
  
15.删除所有容器
  docker rm -f $(docker images -aq)
  
16.从容器中拷贝文件到主机
  docker cp 容器名/id:容器内路径 主机文件路径
  
17.创建卷,创建后可以使用这个卷对容器内的某路径进行挂载
  docker volume create v_name
  
18.删除卷
  docker volume rm v_name
  
19.查看所有卷
  docker volume ls
  
20.删除所有卷
  docker volume prune
  
21.挂载两个容器
  docker run -it --name container01 --volumes-from container02 镜像id/镜像名
  
22.重新打包镜像
  docker tag 已拥有镜像 新镜像
  
23.根据dockerfile构建镜像
  docker build -f 文件路径 -t 标签 .       
     * 末尾.不可略
 
24.登陆dockerhub
  docker login
  
25.提交修改的镜像
  docker commit -m="描述信息" -a="作者" 容器id/容器名 tag标签名   
     * 提交一个新的容器为新的镜像
     
26.发布镜像到dockerhub
  docker push 镜像id/镜像名
     * 这里的镜像名如果是dockerhub 需要写成  dockerhub_id/...  如果是阿里云,建立命名空间镜像仓库后参照文档即可
     
27.查看所有网络
  docker network ls
  
28.查看某个网络
  docker network inspect bridge
  
29.使用docker0进行单向网络连接
  docker run -d -P --link 容器名/id 镜像名/id
  
30.自定义网络

 docker network create --driver 网络模式(bridge/..)  --subnet 自定义ip(192.168.0.0/16) --gateway 网关地址 网络名(mynet)
    * /16代表后两位 255*255=25535个ip   /24则只有一位255个ip     
    * 在启动容器 run 的时候使用 --net可将容器加入指定网络
    * 每个容器都可以有多个网络,如此就解决了不同网段的容器间通信问题

dockerfile 指令

FROM	                 # 基础镜像,一切从这里开始构建
MAINTAINER	         # 镜像是谁写的, 姓名+邮箱
RUN		         # 镜像构建的时候需要运行的命令
ADD		         # 步骤,tomcat镜像,这个tomcat压缩包!添加内容 添加同目录
WORKDIR	                 # 镜像的工作目录
VOLUME	                 # 挂载的目录
EXPOSE	                 # 保留端口配置
CMD		         # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代。
ENTRYPOINT	         # 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD	                 # 当构建一个被继承 DockerFile 这个时候就会运行ONBUILD的指令,触发指令。
COPY	                 # 类似ADD,将我们文件拷贝到镜像中
ENV	                 # 构建的时候设置环境变量!

docker部署分片高可用redis脚本

 # 创建网卡
docker network create redis --subnet 172.38.0.0/16

# 通过脚本创建六个redis配置
for port in $(seq 1 6);\
do \
mkdir -p /mydata/redis/node-${port}/conf
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.38.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done

# 通过脚本运行六个redis
for port in $(seq 1 6);\
do \
docker run -p 637${port}:6379 -p 1667${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.38.0.1${port} redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
done


docker exec -it redis-1 /bin/sh #redis默认没有bash
redis-cli --cluster create 172.38.0.11:6379 172.38.0.12:6379 172.38.0.13:6379 172.38.0.14:6379 172.38.0.15:6379 172.38.0.16:6379  --cluster-replicas 1