docker学习记录

docker启动run的常用参数

参数名称参数作用
-pdocker自动映射暴露端口 (前者是宿主机:后者是容器内机)如:3306:3306
-t表示容器启动后会进入其命令行。进入容器内终端。
–name为启动的容器命名
-v给容器挂载存储卷,挂载到容器的某个目录(后面的容器内的文件挂载到宿主机上,也就是说用宿主机的配置来代替容器内的配置,更改宿主机的配置相当于是改容器内的配置,这样的话加入容器被删除了,也不会丢失我们的配置文件,)
-d在后台运行容器
-m指定容器内的内存上限
-h指定容器的主机名
-i用于控制台交互
-t为当前容器分配一个客户端
-e使用环境变量
-c设置容器cpu权重
–rm当容器退出是,自动移除该容器
–network string为容器连接上网络
–network-alias为容器连接上的网络添加别名

docker常用基本命令

常用docker命令行命令行使用描述
docker start 容器id容器启动
docker stop 容器id容器暂停
docker restart 容器id容器重启
docker kill 容器id强制停止容器
docker images查看所有镜像
docker run -d 容器id后台运行容器
docker rmi -f 容器id删除容器镜像
docker rm -f ${docker ps -a}删除全部容器
docker run -d centos /bin/sh -c “while true;do echo ceshitest;sleep 1;done”使用docker后台启动centos,并且执行一段shell命令
docker exec -it 容器id bashshell进入容器并操作
docker attach 容器id产看容器内运行的任务
docker ps查看运行中的容器
docker ps -a查看运行过的以及现有的全部容器
docker logs -tf --tail 10 容器id查看容器运行日志(10表示行数)
docker top 容器id查看容器内进程信息
docer inspect 容器id查看容器元数据
docker cp 容器id:容器内路径 目的地主机路径从容器内拷贝文件到主机
dokcer search 镜像名称在dockerHub上搜索该镜像
docker pull 镜像名从dockerHub上拉取镜像下来
docker run -d --name -p 宿主机端口:容器内端口(映射关系) 容器名自定义一个名字在后台运行该容器
docker stats查看docker运行状态
curl 访问地址在虚拟机内访问地址
docker volume ls查看所有volume(数据卷)

DockerFile常用命令

命令使用描述案例
FROM基于哪个容器构建新镜像FROM java:8【在java8的基础上构建镜像】
RUN构建容器所执行的命令echo “hello world”【输出helloword】
COPY拷贝文件到镜像中COPY /home/text.txt /home/
EXPOSE暴露容器运行时需要的端口号EXPOSE 8080
CMD运行容器时会执行的命令,当运行容器时带有参数,就会被替换掉,当有多条指令时,最后一条生效CMD ls -l
ENTRYPOINT与CMD相似,但不会被运行容器的参数所覆盖ENTRYPOINT echo “hello world”
WORKDIR容器运行的工作路径WORKDIR /home/redis
ENV设置环境变量ENV JAVA_HOME=/HOME/java…
ADD解压压缩包并拷贝ADD nickdir.tar.gz .

docker的启动,停止,重启,强制停止

docker start 容器id
docker stop 容器id
docker restart 容器id
docker kill 容器id

查看所有镜像

docker images

后台启动容器

docker run -d 容器id

删除镜像

docker rmi -f 容器id

删除全部的容器

docker rm -f ${docker ps -a}

使用docker后台启动centos,并且执行一段shell命令

docker run -d centos /bin/sh -c "while true;do echo ceshitest;sleep 1;done"

当有容器在运行时,我们可以查看运行中的容器

docker ps

查看所有运行过的容器

docker ps -a

查看容器的运行日志

docker logs -tf --tail 10 容器id

查看容器内进程信息

docker top 容器id

查看容器内元数据

docker inspect 容器id

我们的容器运行一般都是运行在后台的,所以,当我们需要进入容器内修改容器需要以下命令

1、第一种

docker exec -it 容器id bashshell

-it表示已交互的模式进入到容器内
2、

docker attach 容器id

从容器内拷贝文件到主机

docker cp 容器id:容器内路径 目的地主机路径

当出现容器名已经被使用时,如下如在这里插入图片描述
我们需要使用命令,查出当前容器名的容器id

docker ps -a|grep portainer_agent

通过容器id,删除该容器。

docker rm 容器id

commit镜像

docker commit 提交容器成为一个新的副本
docker commit -m ="提交的描述信息" -a="作者" 容器id 目标镜像名:【TAG】(tag版本信息,选填)

docker数据卷技术

#docker run -it -v 主机目录:容器内目录 镜像名 /bin/bash

docker run -it -v /home/ceshi:/home centos /bin/bash

使用docker容器快速启动mysql,并且使用数据卷技术实现文件映射,文件保存在本地。

docker run -d --name mysql01 -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=13456979826a mysql:5.7

在使用数据卷volumed的时候如果没有指定本地的映射目录。默认会存在/var/lib/docker/volumes目录下,当前目录下会有多个数据卷。

数据卷容器的使用

  1. 首先应该启动一个容器docker01
docker run -it --name docker01 镜像id
  1. docker02启动
docker run -it --name docker02 --volumes-from docker01(父容器) 镜像id

通过以上,docker01容器内的文件,会同步到docker02

  • 当有docker03使用命令--volumes-from docker01的时候,docker03也会与docker01文件数据保持同步。

只要有一个容器在使用文件。其他容器停止的话,文件也是不受影响的

容器间的数据共享

通过以上,我们知道了通过数据卷容器之间的文件数据是可以互通的。
当我们想使用mysql共享数据时,我们只需要使用数据卷,将文件共享。。当有多个mysql启动,我们都使用--volumes-from (继承)到我们需要同步文件的容器

docker run -d --name mysql01 -p 3310:3306 -v /etc/mysql/conf.d -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=13456979826a mysql:5.7

以上命令表示将/etc/mysql/conf.d/var/lib/mysql两个文件或文件夹通过数据卷共享出去。当有其他的mysql启动,使用--volume-from mysql:5.7,便可以与mysql01共享数据

docker run -d --name mysql02 -p 3310:3306 --volumes-from mysql01 -e MYSQL_ROOT_PASSWORD=13456979826a mysql:5.7

这样mysql01与mysql02便可以数据共享

使用docker自定义创建一条网络

#docker network create 网络模式	IP地址/子网掩码	网关地址
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1

当使用了我们自定义的网络运行了几个容器时。我们就可以通过容器名或者ip地址相互之间ping通。
如果使用的默认的网络模式。我们只能通过ip地址才能相互ping通。

如果容器重启,IP地址更换。便无法通过ip地址进行容器之间连接。我们需要使用--link命令进行容器之间的关联。双方容器需要互相关联。才能互相访问

当不同网络下的容器需要进行连接网络时。我们可以使用connect命令让不同网络下的容器进行关联

  • 实例:
#通过网络连接到容器
docker network connect 网络名 容器名

使用docker容器搭建一个redis集群

1、创建一个redis的专有网络

docker network create redis --subnet 172.38.0.0/16

2、使用shell命令创建6个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
daemonize no
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
appendonle yes
EOF
done

3.1、通过for循环一次启动六个容器

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.38.0.1${port} redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
 done

3.2、依次启动六个容器

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 6372:6379 -p 16372:16379 --name redis-2 \
 -v /mydata/redis/node-2/data:/data \
 -v /mydata/redis/node-2/conf/redis.conf:/etc/redis/redis.conf \
 -d --net redis --ip 172.38.0.12 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
docker run -p 6374:6379 -p 16374:16379 --name redis-4 \
 -v /mydata/redis/node-4/data:/data \
 -v /mydata/redis/node-4/conf/redis.conf:/etc/redis/redis.conf \
 -d --net redis --ip 172.38.0.14 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf

docker run -p 6375:6379 -p 16375:16379 --name redis-5 \
 -v /mydata/redis/node-5/data:/data \
 -v /mydata/redis/node-5/conf/redis.conf:/etc/redis/redis.conf \
 -d --net redis --ip 172.38.0.15 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
docker run -p 6376:6379 -p 16376:16379 --name redis-6 \
 -v /mydata/redis/node-6/data:/data \
 -v /mydata/redis/node-6/conf/redis.conf:/etc/redis/redis.conf \
 -d --net redis --ip 172.38.0.16 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf

4、使用命令docker exec -it redis-1 /bin/sh进入到容器
5、redis集群配置

redis-cli --cluster create 172.38.0.11:6379 172.38.0.12:6379 172.38.0.13:6379 172.38.0.14:6
379 172.38.0.15:6379 172.38.0.16:6379 --cluster-replicas 1

完成redis的集群搭建!

6、redis-cli -c 通过集群的方法打开客户端

可以使用命令

cluster info或者cluster nodes查看相关集群信息

完成以上便可以开始测试了!

cd到项目根目录下,也就是Dockerfile的平级目录下执行如下命令进行打包镜像:

 docker build -t test:v0.1    --这里设置镜像名称为test,版本为v0.1 .
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

languageStudents

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值