Technology sharing

docker basic praecepta

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Imagines
Imago est exemplar solum template, quod instructiones continet pro vase Docker creandi. De more, una imago ex alia imagine innititur, cum aliqua additionali customizatione. Exempli gratia, imaginem aedificare potes quae in imagine Decuria nititur, sed Apache servientis interretialem et applicationem tuam instituere, una cum singulis configurationibus ad applicationem currere.
Continens
Continens est instan- tium discurrens imaginis. Vasa utens Docker API vel CLI creari, inchoari, cessare, moveri vel deleri potest. Continentem ad unum vel plura reticula coniungere potes, repositam retis apponere, ac etiam novas imagines in suo statu currenti fundare.
Defalta, continentia relative bene inter se et exercitus eorum separatae sunt.Potes etiam regere retis, repositione vel aliis stratis subiacentibus

Gradus solitudo subsystem ab aliis vasis seu exercituum.

Continens per eius imaginem definitur et quaelibet optionum conformatio praebetur quando a continente creando vel proficiscendo. Cum vas deletum est, omnis status mutatus qui in promptu repositionis non repositus est, peribit.
CMD
Imagines
# 查看本地镜像
docker images 

# 搜索
docker search <keyword>

# 下载指定镜像(Dockerfile)到本地
docker pull <NAME[:TAG|@DIGEST]>
	
# 上传指定镜像(Dockerfile)到本地
docker push <NAME[:TAG|@DIGEST]>

# 删除指定images # -f:强制删除
docker rmi -f <image_id>

# 保存(导出)镜像⽂件
# -o:指定保存的镜像的名字
docker save -o <file_name> <image_id_or_name> 
# -或-
docker save <image_id_or_name> > <file_name>

# 载⼊镜像
docker load --input <file_name> 
# -或-
docker load < <file_name>



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
Continentes
# 查看正在运⾏的容器,不加-l则只列出正在运⾏的container(⽐如后台任务)
docker ps

# 查看所有的容器
docker ps -a

# 查看指定容器内运⾏进程
# <container>:可以是容器的ID或名称(启动时 --name指定) 
docker top <container>

# 从指定image⾥⽣成⼀个container并在其中运⾏⼀个命令
docker run

# 查看容器⽇志
# -f:查看最新⽇志并监控 docker logs [-f] <container>

# 查看container详情
docker inspect <container>

# 从容器内拷⻉⽂件到主机上
docker cp <container:path> <local_path>

# 再次运⾏某个container docker start <container>

# 中⽌后台任务container docker stop <container>

# Kill指定容器
# --signal:信号量
docker kill [--signal=X] <container>

# 在指定容器内运⾏命令
docker exec <container> <command [cmd_options] ...>

# 将本地标准输⼊、输出和错误流附加到正在运⾏的容器
# 把后台(-d选项运⾏)的容器,调⽤到前台
docker attach <container> 

# 把容器中的对象转成镜像
docker commit <container> <image_name>

# 删除指定container 
docker rm <container>


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
DockerFile
# 常⻅Dockerfile指令
FROM # 基础镜像, ⼀切从这⾥开始构建 MANTAINER # 镜像是谁写的, 姓名+邮箱 RUN #镜像构建的时候需要运⾏的命令
ADD # 步骤, tomcat镜像,压缩包! 添加内容
WORKDIR # 镜像的⼯作⽬录 VOLUME # 挂载的⽬录 EXPOSE # 暴露端⼝配置 RUN #运⾏
CMD # 指定这个容器启动的时候要运⾏的命令,只有最后⼀个会⽣效,可被替代
ENTRYPOINT # 指定这个容器启动的时候要运⾏的命令,可以追加命令
ONBUILD # 当构建⼀个被继承 DockerFile 这个时候就会运⾏ONBUILD的指令,触发指令
COPY # 类似ADD,将我们⽂件拷⻉到镜像中
ENV	# 构建的时候设置环境变量!

示例
FROM fedora # 使⽤fedora Linux系统 MAINTAINER jzg<[email protected]> # 声明作者 ENV MYPATH /usr/local # 声明构建环境变量 WORKDIR $MYPATH # 设置镜像的⼯作⽬录
RUN yum -y install vim # 安装vim
RUN yum -y install net-tools # 安装⽹络⼯具

EXPOSE 80 # 暴露80端⼝

CMD echo $MYPATH # 执⾏echo命令,输出环境变量值
CMD echo "---end---" # 输出字符串

# 构建镜像
# -f:指定⽂件路径
# -t:指定镜像名称和tag
docker build -f <dockerfile_path> -t <name:tag>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
Magnitudo
# 查看Docker数据卷
docker volume ls

# 创建Docker数据卷
docker volume create <volume_name>

# 删除所有未使⽤数据集
docker volume prune

# 删除Docker数据卷
# -f:强制删除
docker volume rm [-f] <volume_name>

# 查看数据卷详情
docker volume inspect <volume_name>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
Network
# 查看Docker⽹络
docker network ls

# 创建Docker⽹络
docker network create <network_name>

# 删除所有未使⽤⽹络
docker network prune

# 删除Docker⽹络
# -f:强制删除
docker network rm [-f] <network_name>

# 断开指定容器的某⽹络连接
docker network disconnect <network_name> <container>

# 指定容器连接某⽹络
docker network connect <network_name> <container>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
In vas
docker exec -it <container> /bin/bash
  • 1
docker componere
### 插件或独⽴程序⽅式运⾏ 
# 查看Compose版本 插件⽅式 
docker compose version

#或查看Compose版本 独⽴⽅式
docker-compose version

### 启动所有服务
# -d:后台运⾏服务
# [service_name]:启动指定服务
docker-compose up [-d] [service_name]

### 关闭所有服务
# [service_name]:启动指定服务 docker-compose down [service_name]

### 列出所有服务容器
docker-compose ps

### 查看服务⽇志
docker-compose logs

# 启动指定服务
docker compose start [service_name]

# 停⽌指定服务
docker compose stop [service_naop]

# 重启指定服务
docker compose restart [service_name]

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
docker continens demo
  1. mysql
# -d:后台运⾏
# -p:映射容器3306端⼝到主机3306端⼝ 
# --name:指定容器名mysql
# -e MYSQL_ROOT_PASSWORD=123456 设置Mysql密码
# docker desktop下
docker run -d 
  --name mysql 
  -p 13306:3306 
  -v mysql-conf:/etc/mysql/conf.d 
  -v mysql-data:/var/lib/mysql 
  -v mysql-logs:/var/log/mysql 
  -e MYSQL_ROOT_PASSWORD=13306 
  mysql:latest
# linux dcoekr 下
docker run -d 
  --name mysql 
  -p 13306:3306 
  -v /home/mysql/conf:/etc/mysql/conf.d 
  -v /home/mysql/data:/var/lib/mysql 
  -v /home/mysql/logs:/var/log/mysql 
  -e MYSQL_ROOT_PASSWORD=123456 
  mysql:latest



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  1. redis
# //---启动容器后执⾏【redis-server /etc/redis/redis.conf --appendonly yes --requirepass 123abc】--//
# 使⽤ /etc/redis/redis.conf配置⽂件启动 
# –appendonly yes 开启redis 持久化
# --requirepass 123abc 使⽤认证密码
docker run --restart=always 
  --log-opt max-size=100m 
  --log-opt max-file=2 
  -p 6379:6379 
  --name redis 
  -v /home/redis/myredis/myredis.conf:/etc/redis/redis.conf 
  -v /home/redis/myredis/data:/data 
  -d redis:latest redis-server /etc/redis/redis.conf 
  --appendonly yes 
  --requirepass 123abc
# docker desptop
docker run --restart=always 
  --log-opt max-size=100m 
  --log-opt max-file=2 
  -p 6379:6379 
  --name redis 
  -v redis-conf:/etc/redis/redis.conf 
  -v redis-data:/data 
  -d redis:latest redis-server /etc/redis/redis.conf 
  --appendonly yes 
  --requirepass 123abc


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  1. RabbitMQ
# 拉取镜像
docker pull rabbitmq:3.13-management

# -d 参数:后台运行 Docker 容器
# --name 参数:设置容器名称
# -p 参数:映射端口号,格式是“宿主机端口号:容器内端口号”。5672供客户端程序访问,15672供后台管理界面访问
# -v 参数:卷映射目录
# -e 参数:设置容器内的环境变量,这里我们设置了登录RabbitMQ管理后台的默认用户和密码
docker run -d 
--name rabbitmq 
-p 5672:5672 
-p 15672:15672 
-v rabbitmq-plugin:/plugins 
-e RABBITMQ_DEFAULT_USER=guest 
-e RABBITMQ_DEFAULT_PASS=123456 
rabbitmq:3.13-management

#延迟队列插件安装 下载
wget https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases/download/v3.13.0/rabbitmq_delayed_message_exchange-3.13.0.ez

#将下载的文件移动到RabbitMQ /plugins目录下
#在下载目录下
docker mv rabbitmq_delayed_message_exchange-3.13.0.ez /var/lib/docker/volumes/rabbitmq-plugin/_data 
# 启用插件
# 登录进入容器内部
docker exec -it rabbitmq /bin/bash
# rabbitmq-plugins命令所在目录已经配置到$PATH环境变量中了,可以直接调用
rabbitmq-plugins enable rabbitmq_delayed_message_exchange
# 退出Docker容器
exit
# 重启Docker容器
docker restart rabbitmq  

如果创建新交换机时可以在type中看到x-delayed-message选项,那就说明插件安装好了
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  1. ElasticSearch
#创建网络
docker network create es-net
  • 1
  • 2
# -e "cluster.name=es-docker-cluster":设置集群名称
# -e "http.host=0.0.0.0":监听的地址,可以外网访问
# -e "ES_JAVA_OPTS=-Xms512m -Xmx512m":内存大小
# -e "discovery.type=single-node":非集群模式
# -v es-data:/usr/share/elasticsearch/data:挂载逻辑卷,绑定es的数据目录
# -v es-logs:/usr/share/elasticsearch/logs:挂载逻辑卷,绑定es的日志目录
# -v es-plugins:/usr/share/elasticsearch/plugins:挂载逻辑卷,绑定es的插件目录
# --privileged:授予逻辑卷访问权
# --network es-net :加入一个名为es-net的网络中
# -p 9200:9200:端口映射配置

docker run -d 
  --name es 
  -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" 
  -e "discovery.type=single-node" 
  -v es-data:/usr/share/elasticsearch/data 
  -v es-plugins:/usr/share/elasticsearch/plugins 
  -v es-logs:/usr/share/elasticsearch/logs 
  --privileged 
  --network es-net 
  -p 9200:9200 
  -p 9300:9300 
  elasticsearch:7.12.1

# 查看日志
  docker logs -f es
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  1. Kibana
# --network es-net :加入一个名为es-net的网络中,与elasticsearch在同一个网络中
# -e ELASTICSEARCH_HOSTS=http://es:9200":
#设置elasticsearch的地址,
#因为kibana已经与elasticsearch在一个网络,因此可以用容器名直接访问elasticsearch
# -p 5601:5601:端口映射配置

docker run -d 
--name kibana 
-e ELASTICSEARCH_HOSTS=http://es:9200 
--network=es-net 
-p 5601:5601  
kibana:7.12.1

# 查看日志
docker logs -f kibana
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  1. IK tokenizer
# 在线安装
docker exec -it es ./bin/elasticsearch-plugin  install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip
# 重启
docker restart es

#离线安装
# 将下载解压的文件elasticsearch-analysis-ik-7.12.1.zip 重命名 为ik 执行以下命令
docker mv ik /var/lib/docker/volumes/es-plugins/_data
# 重启
docker restart es

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11