wiki-files/docker/use.md

7.0 KiB
Raw Blame History

title description published date tags editor dateCreated
docker的使用 docker的简单使用 true 2021-12-17T08:47:51.786Z docker markdown 2021-08-02T07:26:50.035Z

容器使用

拉取镜像

$ docker pull ubuntu

启动新容器

交互式启动

$ docker run -it 镜像 /bin/bash

参数说明:

  • -i交互式操作
  • -t终端
  • /bin/bash在镜像后的是命令这里希望交互式Shell。

后台启动

$ docker run -itd --name 容器名称 镜像 /bin/bash

参数说明:

  • -d默认不会进入容器

查看现有容器

$ docker ps -a

启动已经停止的容器

$ docker start 容器的ID或名称

停止容器

$ docker stop 容器ID或名称

重启容器

$ docker restart 容器ID或名称

进入容器

docker attach

进入正在执行的命令行,退出后容器停止

$ docker attach 容器ID或名称 

docker exec

打开新的命令行,退出后容器不停止

docker exec -it 容器ID或名称 bash

导出容器

$ docker export 容器ID或名称 > 导出文件名.tar

导入容器

指定文件

$ cat 要导入的镜像.tar | docker import - 导入后的镜像名称:TAG

$ docker import - 导入后的镜像名称:TAG

通过URL导入

$ docker import http://example.com/exampleimage.tgz example/imagerepo

导出镜像

$ docker save 镜像ID或名称 > 导出名称.tar

导入镜像

$ docker load < 导入名称.tar

删除镜像

$ docker image rm 镜像ID或名称
$ docker rmi 镜像ID或名称

批量删除 <none> 镜像

$ docker rmi $(docker images | grep "none" | awk '{print $3}') 

删除容器

$ docker rm -f 容器ID或名称

mongo

运行容器

$ docker run -p 27017:27017 --name MongoDB -v /root/docker/mongo/db:/data/db -d mongo

redis

运行容器

没有密码

$ docker run \
    -e ALLOW_EMPTY_PASSWORD=yes \
    -v /path/to/redis-persistence:/bitnami/redis/data \
    bitnami/redis:latest

设置密码

$ docker run --name redis -e REDIS_PASSWORD=666 -p 6379:6379 -d bitnami/redis:6.2.6

nginx

运行容器

$ 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

运行容器

$ docker run --name mysql57 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
$ 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文件配置

$ docker run --name mysql57 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

nexus3

创建目录并授权

$ mkdir /root/docker/nexus/nexus-data && chown -R 200 /root/docker/nexus/nexus-data

运行容器

$ 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

运行容器

$ 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

获取镜像

$ docker pull bitnami/zookeeper

启动容器

$ docker run -d -p 2181:2181 --name zookeeper-server \
    --network app-tier \
    -e ALLOW_ANONYMOUS_LOGIN=yes \
    bitnami/zookeeper:latest

Kafka

获取镜像

docker pull bitnami/kafka

启动容器

如果用network需要与zookeeper属于同一个network

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_CONNECTzookeeper地址与端口network时用别名 ALLOW_PLAINTEXT_LISTENER:允许使用 PLAINTEXT 监听. 默认: no. KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAPCLIENT: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: 内部监听名称

卷与数据持久化

新卷

$ docker volume create 卷名

查看卷列表

$ docker volume ls

查看卷详情

$ docker volume inspect 卷名

删除所有未使用的卷

$ docker volume prune

删除一个或多个

$ docker volume rm 卷名...

挂载卷

$ docker run --name 容器名称 -d -p 8080:80 -v 卷名或者绝对路径:/usr/share/nginx/html/ nginx:v2

挂载配置文件

$ docker run --name 容器名称 -d -p 8080:80 -v 配置文件:/etc/nginx/nginx.conf nginx:v2

-v 可以有多个配置

挂载配置文件的前提是配置文件需提前存在

拷贝

拷贝文件到容器中

$ docker cp /root/nginx/conf/config/conf 容器名:/etc/nginx/conf

从容器中拷贝出文件

$ docker cp 容器名:/etc/nginx/conf/config.cnf /root/nginx/conf/

网络

查看网络

$ docker network ls

创建网络

$ docker network create 网络名称

容器加入网络

$ docker run --network 网络名称 --network-alias 容器在网络中的别名(用于通信时直接使用)

开机启动

参数

  1. no: 默认策略,在容器退出时不重启容器
  2. on-failure: 在容器非正常退出时退出状态非0才会重启容器
  3. unless-stopped: 在容器退出时总是重启容器但是不考虑在Docker守护进程启动时就已经停止了的容器
  4. always: 在容器退出时总是重启容器

示例:

$ docker run -m 512m --memory-swap 1G -it -p 58080:8080 --restart=always

更新配置

docker update [OPTIONS] CONTAINER [CONTAINER...]