docker笔记
docker 教程方法
1.docker 的镜像和容器的基本操作
uname -r 查看系统的版本信息
docker version 查看是否安装成功
docker images --help
docker ps 查询正则运行的命令
docker ps -a 查询全部的容器
docker ps -n=1 显示 最近一个容器的
docker ps -q 只显示容器的编号
ctrl+p+q 容器退出不停止运行
docker 搜索
搜索星级大于3000
docker search mysql --filter=STARS=3000
docker pull mysql:5.7
docker 删除镜像
docker rmi -f 镜像id #删除指定的镜像
docker rmi -f 镜像id 镜像id #删除多个镜像
docker rmi -f $(docker images -aq) # 删除全部镜像
docker 容器
新建容器并启动
docker run [] image
#参数说明
–name=‘Name’ 容器名
-d 后台运行
-p 指定端口
-it 使用交互模式运行
启动并进行容器内
docker run -it centos /bin/bash
删除容器
docker rm 容器id #删除指定的容器,不能删除正则运行的容器
docker rm -f $(docker ps -aq) #删除所有容器
docker ps -a -q | xargs docker rm #删除所有容器
启动和停止容器
docker start 容器id
docker restart 容器id
docker stop 容器id
dokcer kill 容器id
docker stop 容器id
常用的其他命令
后台启动容器
docker run -d 镜像名 #比如加it可以视为前台命令
查看日志信息
docker logs
docker logs -f -t --tail 10 容器id
查看容器中的进程信息
docker top 容器id
查看容器的信息
docker inspect 容器id
进入当前正在运行的容器
docker exec -it 容器id /bin/bash #进图容器开启一个新的终端,可以在里面操作
docker attach 容器id #进入正在进行的容器内
从容器内拷贝到主机上
进入到容器内
docker cp 容器id:/home/文件名 /home /ubuntu
项目注意点
docker run -d --name nginx01 -p 3304:80 nginx
curl local:3304 # 本地运行测试
docker 配置es的命令
docker run -d --name elasticsearch -p 9200:9300 -e “discovery.type=single-node” -e ES_JAVA_OPTS="-Xms64m -Xmx51m" elasticsearch:7.6.2
commit 镜像
docker commit -a=‘sss’ -m=‘add web’ 容器id tomcat:1.0
2.容器数据卷
1.使用数据卷
方式一,直接使用命令挂载 -v
docker run -it -v /home/ceshi:/home ubutu /bin/bash
#挂载mysql
-d 后台运行
-p 端口
-v # 卷挂载
-e #环境配置
–name 容器的名字
docker run -d -p 3310:3306 -v /homge/ubuntu/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
2.具名和匿名挂载
匿名挂载
docker run -d -P --name nginx01 -v /etc/nginx nginx #-v 容器内路径,
具名挂载
docker volume ls
docker run -d -P --name nginx03 -v juming-Nginx:/etc/nginx nginx
3.初识dockerfile
dockerfile 就是用来构建docker 镜像构建文件,命令脚本,通过脚本可以生成镜像,镜像是一层一层的,脚本是一个个的命令
#创建一个dockerfile文件,名字随机,建议dockerfile
FROM centos
VOLUME [‘volume01’,‘volume02’]
CMD echo ‘–end —’
CMD /bin/bash
#运行
docker build -f /home/ubuntu/docker_test_volume/dockerfile -t jayson/ubuntu . # 后面是有点 . 代表当前的路径
docker 过个容器共用一个存储数据,称为数据卷容器
#主要是–volumes-from
docker run -it --name docker02 --volumes-from docker01 jayson_ubuntu
3.dockerfile制作镜像
1.dockerfile 构建过程
每个保留关键字都是必须大写字母
执行从上到下顺序执行
#表示注释
每一个指令都会创建提交一个新的镜像层,并提交
dockerfile都是面向开发的,我们以后发布项目,做镜像,都是编写dockerfile文件,文件十分简单
docker镜像逐渐成为企业交付的标准,必须掌握!
DokerFile :构建文件,定义了一切的步骤,源代码
Dockerimages:通过DockerFile构建生成的镜像,最终发布和运行产品
DockerFile的指令
FROM #基础镜像,一切从这里开始构建
MAINTAINER #镜像是谁写的,姓名+邮箱
ADD #步骤,tomcat镜像,添加内容
WORKDIR #镜像的工作目录
VOLUME # 挂载的目录
EXPOSE # 暴露的端口配置
CMD #指定容器启动时要运行的命令,只有一个最后的命令生效,可以被替代
ENTRYPOINT # 指的是容器启动时要运行的命令,可以追加
ONBUILD #当构建一个被继承的dockerfile,这时候会运行onbuild指令
COPY #类似于ADD,将文件拷贝到镜像当中
ENV #构建的时候设置环境变量
实战docker
创建一个centos,先创建文件
ubuntu@VM-0-4-ubuntu:~/dockerfile$ vi mydockerfile
ubuntu@VM-0-4-ubuntu:~/dockerfile$ cat mydockerfile
FROM centos
MAINTAINER jayson123@qq.com
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOST 80
CMD echo $MYPATH
CMD echo “–end–”
CMD /bin/bash
docker history 可以看到镜像的构建过程
CMD 和ENTRYPOINT的区别
3.docker 网络
ip addr
linux可以ping通docker容器内部
原理
evth-pair是linux虚拟设备接口,成对出现,,docker所有的网络接口都是虚拟的,
#可以通过ip进行ping通
docker exec -it tomat02 ping 172.18.0.3
如果通过非主机名直接ping通,需要通过–link
docker run -d -P --name tomcat03 --link tomcat02 tomcat
docker exec -it tomcat04 ping tomcat01
docker network ls#查看网络
#直接启动命令 --net bridge ,这个就是我们的docker0
docker run -d -P --name tomcat01 tomcat
docker run -d -P --name tomcat01 --net bridge tomcat
#docker0的特点默认,域名是不能访问,–link可以打通链接
#我们可以自定义一个网络
####下面是自己组建了一个网络,可以保持自己集群的健康,集群之间相互隔离
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
#查询自己的网络
docker network ls
#加入到网络
docker run -d -P --name tomcat-net-01 --net mynet tomcat
docker run -d -P --name tomcat-net-02 --net mynet tomcat
#查询到网络可以看到
docker network inspect mynet
2.网络连通
将容器和集群连接
docker network connect mynet tomcat01
原理是直接将容器的ip直接加入到自定义的网络当中,暴力计入
3.docker 建立redis集群实战
环境部署,三主三从,从的是备份机
docker network create redis --subnet 172.38.0.0/16
docker network ls
#创建集群配置文件
for port in $(seq 1 6); \
do \
mkdir -p /mydata/redis/node-/conf
touch /mydata/redis/node-/conf/redis.conf
cat << EOF>/mydata/redis/node-/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
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
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.38.0.11 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
#第二个
docker run -p 6373:6379 -p 16373:16379 --name redis-3 -v /mydata/redis/node-3/data:/data -v /mydata/redis/node-3/conf/redis.conf:/etc/redis/redis.conf -d --net redis --ip 172.38.0.13 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
e0ddd2844f8565575f3228ef16308828b14feb508e65dbc7c0eb8e02df870263
#一共启动了6个
#接下来创建集群
进入到sh
docker exec -it redis-01 /bin/sh
/data# 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
#显示下面的结果表示成功
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 172.38.0.15:6379 to 172.38.0.11:6379
Adding replica 172.38.0.16:6379 to 172.38.0.12:6379
Adding replica 172.38.0.14:6379 to 172.38.0.13:6379
M: 8742bf66934ec467e43d74c9fd2c9c06d1b0adfe 172.38.0.11:6379
slots:[0-5460] (5461 slots) master
M: b9e11f701c7ca13eb9c35d1b786bd4f5c0fa0731 172.38.0.12:6379
slots:[5461-10922] (5462 slots) master
M: e5ae04bff43034f04f0dfa23ee66c4563160aa37 172.38.0.13:6379
slots:[10923-16383] (5461 slots) master
S: dba613da945914b339adf96a2a7fbc30fb01848e 172.38.0.14:6379
replicates e5ae04bff43034f04f0dfa23ee66c4563160aa37
S: 7858895f332bd68775267adf5c3530ab1172fa60 172.38.0.15:6379
replicates 8742bf66934ec467e43d74c9fd2c9c06d1b0adfe
S: 3472dc464937a645af57ece9a4ec8769ed6b2fa0 172.38.0.16:6379
replicates b9e11f701c7ca13eb9c35d1b786bd4f5c0fa0731
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
..
>>> Performing Cluster Check (using node 172.38.0.11:6379)
M: 8742bf66934ec467e43d74c9fd2c9c06d1b0adfe 172.38.0.11:6379
slots:[0-5460] (5461 slots) master
1 additional replica(s)
S: 7858895f332bd68775267adf5c3530ab1172fa60 172.38.0.15:6379
slots: (0 slots) slave
replicates 8742bf66934ec467e43d74c9fd2c9c06d1b0adfe
M: e5ae04bff43034f04f0dfa23ee66c4563160aa37 172.38.0.13:6379
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
S: dba613da945914b339adf96a2a7fbc30fb01848e 172.38.0.14:6379
slots: (0 slots) slave
replicates e5ae04bff43034f04f0dfa23ee66c4563160aa37
S: 3472dc464937a645af57ece9a4ec8769ed6b2fa0 172.38.0.16:6379
slots: (0 slots) slave
replicates b9e11f701c7ca13eb9c35d1b786bd4f5c0fa0731
M: b9e11f701c7ca13eb9c35d1b786bd4f5c0fa0731 172.38.0.12:6379
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
这边就整理了一小部分的笔记
方便一起学习 本文源自个人学习笔记