6.4 KiB
6.4 KiB
title | description | published | date | tags | editor | dateCreated |
---|---|---|---|---|---|---|
docker的使用 | docker的简单使用 | true | 2021-12-10T07:31:25.458Z | 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
说明:
- 将MySQL加入service网络
- 指定了配置文件卷
- 指定了数据库卷
- 指定了ROOT用户密码
- 指定了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"
说明:
- 端口 9000 为API端口,固定
- 端口 9001 为控制台(网页)端口,通过 --console-address ":9001" 指定,不固定
- 目录 /data 为数据文件夹
- 默认用户名密码在启动后通过 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 --name kafka -p 9092:9092 -e ALLOW_PLAINTEXT_LISTENER=yes -e KAFKA_CFG_ZOOKEEPER_CONNECT=192.168.0.103:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.0.103:9092 -d bitnami/kafka:latest
参数说明 KAFKA_CFG_ZOOKEEPER_CONNECT:zookeeper地址与端口,network时用别名 KAFKA_ADVERTISED_LISTENERS:绑定HOST与PORT,不然无法访问
卷与数据持久化
新卷
$ 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 容器在网络中的别名(用于通信时直接使用)
开机启动
参数
- no: 默认策略,在容器退出时不重启容器
- on-failure: 在容器非正常退出时(退出状态非0),才会重启容器
- unless-stopped: 在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
- always: 在容器退出时总是重启容器
示例:
$ docker run -m 512m --memory-swap 1G -it -p 58080:8080 --restart=always
更新配置
docker update [OPTIONS] CONTAINER [CONTAINER...]