wiki-files/docker/use.md

375 lines
7.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: docker的使用
description: docker的简单使用
published: true
date: 2021-12-17T08:47:51.786Z
tags: docker
editor: markdown
dateCreated: 2021-08-02T07:26:50.035Z
---
# 容器使用
## 拉取镜像
```bash
$ docker pull ubuntu
```
## 启动新容器
### 交互式启动
```bash
$ docker run -it 镜像 /bin/bash
```
参数说明:
- -i交互式操作
- -t终端
- /bin/bash在镜像后的是命令这里希望交互式Shell。
### 后台启动
```bash
$ docker run -itd --name 容器名称 镜像 /bin/bash
```
参数说明:
- -d默认不会进入容器
## 查看现有容器
```bash
$ docker ps -a
```
## 启动已经停止的容器
```bash
$ docker start 容器的ID或名称
```
## 停止容器
```bash
$ docker stop 容器ID或名称
```
## 重启容器
```bash
$ docker restart 容器ID或名称
```
## 进入容器
### docker attach
进入正在执行的命令行,退出后容器停止
```bash
$ docker attach 容器ID或名称
```
### docker exec
打开新的命令行,退出后容器不停止
```bash
docker exec -it 容器ID或名称 bash
```
## 导出容器
```bash
$ docker export 容器ID或名称 > 导出文件名.tar
```
## 导入容器
### 指定文件
```bash
$ cat 要导入的镜像.tar | docker import - 导入后的镜像名称:TAG
```
```bash
$ docker import - 导入后的镜像名称:TAG
```
### 通过URL导入
```bash
$ docker import http://example.com/exampleimage.tgz example/imagerepo
```
## 导出镜像
```bash
$ docker save 镜像ID或名称 > 导出名称.tar
```
## 导入镜像
```bash
$ docker load < 导入名称.tar
```
## 删除镜像
```bash
$ docker image rm 镜像ID或名称
```
```bash
$ docker rmi 镜像ID或名称
```
批量删除 **\<none\>** 镜像
```bash
$ docker rmi $(docker images | grep "none" | awk '{print $3}')
```
## 删除容器
```bash
$ docker rm -f 容器ID或名称
```
# mongo
## 运行容器
```bash
$ docker run -p 27017:27017 --name MongoDB -v /root/docker/mongo/db:/data/db -d mongo
```
# redis
## 运行容器
没有密码
```bash
$ docker run \
-e ALLOW_EMPTY_PASSWORD=yes \
-v /path/to/redis-persistence:/bitnami/redis/data \
bitnami/redis:latest
```
设置密码
```bash
$ docker run --name redis -e REDIS_PASSWORD=666 -p 6379:6379 -d bitnami/redis:6.2.6
```
# nginx
## 运行容器
```bash
$ docker run --name Nginx1 -p 9091:80 -v /root/docker/nginx/www1:/usr/share/nginx/html -v /root/docker/nginx/conf1:/etc/nginx -d nginx
```
# mysql
## 运行容器
```bash
$ docker run --name mysql57 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
```
```bash
$ docker run --name MySQL --network service -v /root/mysql/conf:/etc/mysql/conf.d -v /root/mysql/db/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
```
说明:
1. 将MySQL加入service网络
2. 指定了配置文件卷
3. 指定了数据库卷
4. 指定了ROOT用户密码
5. 指定了utf8mb4字符集如果用配置文件可省略
## 脱离my.cnf文件配置
```bash
$ docker run --name mysql57 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
```
# nexus3
## 创建目录并授权
```bash
$ mkdir /root/docker/nexus/nexus-data && chown -R 200 /root/docker/nexus/nexus-data
```
## 运行容器
```bash
$ docker run -p 9898:8081 --name Nexus -e INSTALL4J_ADD_VM_PARAMS="-Xms200m -Xmx500m -XX:MaxDirectMemorySize=500m" -v /root/docker/nexus/nexus-data:/nexus-data -d sonatype/nexus3:latest
```
# minio
## 运行容器
```bash
$ docker run --name minio -p 9001:9000 -p 9002:9001 -v /projects/minio/uploadFiles/:/data/ -d minio/minio:latest server /data --console-address ":9001"
```
说明:
1. 端口 **9000** 为API端口固定
2. 端口 **9001** 为控制台(网页)端口,通过 **--console-address ":9001"** 指定,不固定
3. 目录 **/data** 为数据文件夹
4. 默认用户名密码在启动后通过 **docker logs minio** 查看
# Zookeeper
## 获取镜像
```bash
$ docker pull bitnami/zookeeper
```
## 启动容器
```bash
$ docker run -d -p 2181:2181 --name zookeeper-server \
--network app-tier \
-e ALLOW_ANONYMOUS_LOGIN=yes \
bitnami/zookeeper:latest
```
# Kafka
## 获取镜像
```bash
docker pull bitnami/kafka
```
## 启动容器
如果用network需要与zookeeper属于同一个network
```bash
docker run -d --name kafka --network zk -p 9092:9092 -p 9093:9093 -e ALLOW_PLAINTEXT_LISTENER=yes -e KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181 -e KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CLIENT:PLAINTEXT,EXTERNAL:PLAINTEXT -e KAFKA_CFG_LISTENERS=CLIENT://:9092,EXTERNAL://:9093 -e KAFKA_CFG_ADVERTISED_LISTENERS=CLIENT://kafka:9092,EXTERNAL://192.168.0.156:9093 -e KAFKA_CFG_INTER_BROKER_LISTENER_NAME=CLIENT bitnami/kafka:latest
```
参数说明
**KAFKA_CFG_ZOOKEEPER_CONNECT**zookeeper地址与端口network时用别名
**ALLOW_PLAINTEXT_LISTENER**:允许使用 PLAINTEXT 监听. 默认: no.
**KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP**CLIENT:PLAINTEXT,EXTERNAL:PLAINTEXT
**KAFKA_CFG_LISTENERS**: kafka监听CLIENT://:9092客户端将监听992,EXTERNAL://:9093外部监听9093
**KAFKA_CFG_ADVERTISED_LISTENERS**: 公布地址CLIENT://kafka:9092容器地址,EXTERNAL://192.168.0.156:9093外部地址
**KAFKA_CFG_INTER_BROKER_LISTENER_NAME**: 内部监听名称
# 卷与数据持久化
## 新卷
```bash
$ docker volume create 卷名
```
## 查看卷列表
```bash
$ docker volume ls
```
## 查看卷详情
```bash
$ docker volume inspect 卷名
```
## 删除所有未使用的卷
```bash
$ docker volume prune
```
## 删除一个或多个
```bash
$ docker volume rm 卷名...
```
## 挂载卷
```bash
$ docker run --name 容器名称 -d -p 8080:80 -v 卷名或者绝对路径:/usr/share/nginx/html/ nginx:v2
```
## 挂载配置文件
```bash
$ docker run --name 容器名称 -d -p 8080:80 -v 配置文件:/etc/nginx/nginx.conf nginx:v2
```
-v 可以有多个配置
挂载配置文件的前提是配置文件需提前存在
# 拷贝
## 拷贝文件到容器中
```bash
$ docker cp /root/nginx/conf/config/conf 容器名:/etc/nginx/conf
```
## 从容器中拷贝出文件
```bash
$ docker cp 容器名:/etc/nginx/conf/config.cnf /root/nginx/conf/
```
# 网络
## 查看网络
```bash
$ docker network ls
```
## 创建网络
```bash
$ docker network create 网络名称
```
## 容器加入网络
```bash
$ docker run --network 网络名称 --network-alias 容器在网络中的别名(用于通信时直接使用)
```
# 开机启动
## 参数
1. no: 默认策略,在容器退出时不重启容器
2. on-failure: 在容器非正常退出时退出状态非0才会重启容器
3. unless-stopped: 在容器退出时总是重启容器但是不考虑在Docker守护进程启动时就已经停止了的容器
4. always: 在容器退出时总是重启容器
示例:
```bash
$ docker run -m 512m --memory-swap 1G -it -p 58080:8080 --restart=always
```
# 更新配置
```bash
docker update [OPTIONS] CONTAINER [CONTAINER...]
```