기술나눔

도커 기본 명령

2024-07-12

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

이미지
이미지는 Docker 컨테이너를 생성하기 위한 지침이 포함된 읽기 전용 템플릿입니다. 일반적으로 하나의 이미지는 다른 이미지를 기반으로 하며 일부 추가 사용자 정의가 포함됩니다. 예를 들어 Ubuntu 이미지를 기반으로 하는 이미지를 빌드할 수 있지만 Apache 웹 서버와 애플리케이션을 설치하고 애플리케이션을 실행하는 데 필요한 구성 세부 정보도 함께 설치할 수 있습니다.
컨테이너
컨테이너는 실행 가능한 이미지 인스턴스입니다. Docker API 또는 CLI를 사용하여 컨테이너를 생성, 시작, 중지, 이동 또는 삭제할 수 있습니다. 컨테이너를 하나 이상의 네트워크에 연결하고, 해당 네트워크에 스토리지를 연결하고, 현재 상태를 기반으로 새 이미지를 생성할 수도 있습니다.
기본적으로 컨테이너는 서로 및 해당 호스트와 비교적 잘 격리되어 있습니다.컨테이너의 네트워크, 스토리지 또는 기타 기본 레이어를 제어할 수도 있습니다.

다른 컨테이너나 호스트로부터 하위 시스템을 격리하는 정도입니다.

컨테이너는 해당 이미지와 컨테이너를 생성하거나 시작할 때 제공되는 구성 옵션으로 정의됩니다. 컨테이너가 삭제되면 영구 저장소에 저장되지 않은 변경된 상태는 모두 사라집니다.
커맨드
이미지
# 查看本地镜像
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
컨테이너
# 查看正在运⾏的容器,不加-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指令
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
용량
# 查看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
회로망
# 查看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
용기에 담기
docker exec -it <container> /bin/bash
  • 1
도커 컴포즈
### 插件或独⽴程序⽅式运⾏ 
# 查看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
도커 컨테이너 데모
  1. 마이스클
# -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-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. 래빗MQ
# 拉取镜像
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. 탄력적 검색
#创建网络
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. 키바나
# --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 토크나이저
# 在线安装
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