赞
踩
Images镜像相关的命令
docker images
: 列出所有镜像
docker rmi
: 删除镜像
docker tag
: 给源镜像创建一个新的标签,变成新的镜像
docker history
: 显示镜像的历史
…
Container容器相关的命令
docker start
: 启动一个或者多个容器
docker kill/stop
: 杀死/停止一个或者多个容器
docker pause/unpause
: 暂停/启动 一个或者多个容器
docker rm
: 移除一个或者多个容器
docker ps
: 列出所有容器
…
镜像和容器之间转换的命令
docker commit
: 把容器的改变 提交创建一个新的镜像
docker create
: 创建新容器,但并不启动(注意与docker run 的区分)需要手动启动。start\stop
docker run
: 创建并启动容器
…
docker的主要命令图解:
命令 | 作用 |
---|---|
attach | 绑定到运行中容器的 标准输入, 输出,以及错误流(这样似乎也能进入容器内容,但是一定小心,他们操作的就是控制台,控制台的退出命令会生效,比如redis,nginx… |
build | 从一个 Dockerfile 文件构建镜像 |
commit | 把容器的改变 提交创建一个新的镜像 |
cp | 容器和本地文件系统间 复制 文件/文件夹 |
create | 创建新容器,但并不启动(注意与docker run 的区分)需要手动启动。start\stop |
diff | 检查容器里文件系统结构的更改【A:添加文件或目录 D:文件或者目录删除 C:文件或者目录更改】 |
events | 获取服务器的实时事件 |
exec | 在运行时的容器内运行命令 |
export | 导出容器的文件系统为一个tar文件。commit是直接提交成镜像,export是导出成文件方便传输 |
history | 显示镜像的历史 |
images | 列出所有镜像 |
import | 导入tar的内容创建一个镜像,再导入进来的镜像直接启动不了容器。/docker-entrypoint.sh nginx -g 'daemon of;'docker ps --no-trunc 看下之前的完整启动命令再用他 |
info | 显示系统信息 |
inspect | 获取docker对象的底层信息 |
kill | 杀死一个或者多个容器 |
load | 从 tar 文件加载镜像 |
login | 登录Docker registry |
logout | 退出Docker registry |
logs | 获取容器日志;容器以前在前台控制台能输出的所有内容,都可以看到 |
pause | 暂停一个或者多个容器 |
port | 列出容器的端口映射 |
ps | 列出所有容器 |
pull | 从registry下载一个image 或者repository |
push | 给registry推送一个image或者repository |
rename | 重命名一个容器 |
restart | 重启一个或者多个容器 |
rm | 移除一个或者多个容器 |
rmi | 移除一个或者多个镜像 |
run | 创建并启动容器 |
save | 把一个或者多个镜像保存为tar文件 |
search | 去docker hub寻找镜像 |
start | 启动一个或者多个容器 |
stats | 显示容器资源的实时使用状态 |
stop | 停止一个或者多个容器 |
tag | 给源镜像创建一个新的标签,变成新的镜像 |
top | 显示正在运行容器的进程 |
unpause | pause的反操作 |
update | 更新一个或者多个docker容器配置 |
version | Show the Docker version information |
container | 管理容器 |
image | 管理镜像 |
network | 管理网络 |
volume | 管理卷 |
docker pull redis : 等价docker pull redis:latest, 下载镜像
docker rmi -f: 删除镜像
docker images -aq: 删除全部镜像
docker image prune #移除游离镜像 dangling:游离镜像(没有镜像名字的)
docker tag 原镜像:标签 新镜像名:标签 #重命名
docker create [OPTIONS] IMAGE [COMMAND] [ARG…]
docker create [设置项] 镜像名 [启动] [启动参数…]
docker create redis: 按照redis:latest镜像启动一个容器
docker kill是强制kill -9(直接拔电源);
docker stop可以允许优雅停机(当前正在运行中的程序处理完所有事情后再停止)
docker create --name myredis -p 6379(主机的端口):6379(容器的端口) redis -p port1:port2
docker run --name myredis2 -p 6379:6379 -p 8888:6379 redis :默认是前台启动的,一般加上-d 让他后台悄悄启动, 虚拟机的很多端口绑定容器的一个端口是允许的
docker run -d == docker create + docker start
docker rm -f $(docker ps -aq)
进入运行中的容器内部
exec
: Run a command in a running container(在运行的容器中运行命令)
exec -i
: --interactive(相互作用的). Keep STDIN open even if not attached(即使没有连接,也要保持STDIN打开)
exec -t
: --tty Allocate a pseudo-TTY(分配一个伪终端设备)
如下:
docker exec -it mynginx4 /bin/bash: 0用户,以特权方式进入容器
常用关键参数 OPTIONS 说明:
-d
: 后台运行容器,并返回容器ID;
-i
: 以交互模式运行容器,通常与 -t 同时使用;
-P
: 随机端口映射,容器内部端口随机映射到主机的端口
-p
:指定端口映射,格式为:主机(宿主)端口:容器端口
-
t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
--name
=“nginx-lb”:为容器指定一个名称;
--dns
8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
--dns-search
example.com: 指定容器DNS搜索域名,默认和宿主一致;
-h
“mars”: 指定容器的hostname;
-e
username=“ritchie”: 设置环境变量;
--env-file
=[]: 从指定文件读入环境变量;
--cpuset
=“0-2” or --cpuset=“0,1,2”: 绑定容器到指定CPU运行;
-m
:设置容器使用内存最大值;
--net
=“bridge”: 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
--link
=[]: 添加链接到另一个容器;
--expose
=[]: 开放一个端口或一组端口;
--restart
, 指定重启策略,可以写–restart=awlays 总是故障重启
--volume
, -v: 绑定一个卷。一般格式 主机文件或文件夹:虚拟机文件或文件夹
常见部署案例:
部署Nginx
#注意 外部的/nginx/conf下面的内容必须存在,否则挂载会覆盖
docker run --name nginx-app \
-v /app/nginx/html:/usr/share/nginx/html:ro \
-v /app/nginx/conf:/etc/nginx
-d nginx
部署MySQL
# 5.7版本 docker run -p 3306:3306 --name mysql57-app \ -v /app/mysql/log:/var/log/mysql \ -v /app/mysql/data:/var/lib/mysql \ -v /app/mysql/conf:/etc/mysql/conf.d \ -e MYSQL_ROOT_PASSWORD=123456 \ -d mysql:5.7 #8.x版本,引入了 secure-file-priv 机制,磁盘挂载将没有权限读写data数据, # 所以需要将权限透传,或者chmod -R 777 /app/mysql/data # --privileged 特权容器,容器内使用真正的root用户 docker run -p 3306:3306 --name mysql8-app \ -v /app/mysql/conf:/etc/mysql/conf.d \ -v /app/mysql/log:/var/log/mysql \ -v /app/mysql/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ --privileged \ -d mysql
部署Redis
# 提前准备好redis.conf文件,创建好相应的文件夹。如:
port 6379
appendonly yes
#更多配置参照 https://raw.githubusercontent.com/redis/redis/6.0/redis.conf
docker run -p 6379:6379 --name redis \
-v /app/redis/redis.conf:/etc/redis/redis.conf \
-v /app/redis/data:/data \
-d redis:6.2.1-alpine3.13 \
redis-server /etc/redis/redis.conf --appendonly yes
部署ElasticSearch
#准备文件和文件夹,并chmod -R 777 xxx
#配置文件内容,参照
https://www.elastic.co/guide/en/elasticsearch/reference/7.5/node.name.html 搜索相
关配置
# 考虑为什么挂载使用esconfig ...
docker run --name=elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms300m -Xmx300m" \
-v /app/es/data:/usr/share/elasticsearch/data \
-v /app/es/plugins:/usr/shrae/elasticsearch/plugins \
-v esconfig:/usr/share/elasticsearch/config \
-d elasticsearch:7.12.0
no
,默认策略,在容器退出时不重启容器on-failure
,在容器非正常退出时(退出状态非0),才会重启容器on-failure:3
,在容器非正常退出时重启容器,最多重启3次always
,在容器退出时总是重启容器unless-stopped
,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。