1. pull 下载镜像
docker pull xxxx
例如下载redis镜像:docker pull redis 或者 docker pull redis:latest(最新版)
下载指定版本的镜像:docker pull redis:标签(去registry.hub.docker.com软件市场搜索reids点击查看tag)
2. images 查看本地镜像
docker images
或者
docker images ls
查看本地的镜像:
REPOSITORY:名
TAG :标签
IMAGE ID:镜像id
CREATED:镜像的创建时间
SIZE:大小
3. run/start 启动镜像
前台启动:docker run 镜像名(REPOSITORY)
交互启动:docker run -it 镜像名(REPOSITORY) # 后台交互命令执行
后台启动:docker run -d 镜像名(REPOSITORY) # 相当于 docker create + docker start
后台启动:docker start 镜像名(REPOSITORY)
4. top 查看容器的进程信息
docker top 容器名称/容器id
5. log 查看容器日志
先启动一个nginx容器:docker run -d --name mynginx2 -p 88:80 nginx (会自动下载好并启动)
查看是否启动好了:docker ps (或者使用ip:88出现nginx的页面也可)
查看日志:docker logs 容器名
- docker logs magical_dubinsky
- docker logs -f magical_dubinsky 实时追踪
6. stop / pause / unpause / kill 停机
优雅停机,当前正在运行中的程序处理完所有事情后再停止:
docker stop
暂停:
docker pause
恢复:
docker unpause
强制kill -9(直接拔电源):
docker kill
7. create 创建新的容器但不启动它
语法:docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
含义:docker create [设置项] 镜像名 [启动] [启动参数...]
例如:docker create redis: # 按照redis:latest镜像启动一个容器
具体操作:
docker create --name myredis -p 6379:6379 redis
- –name myredis 取别名
- 第一个6379:Linux主机的端口,必须唯一
- 第二个6379:容器的端口,可以重复
- 目的:将外部访问的端口和容器里面的端口绑定
8. ps 查看活跃容器运行状态
- Created(新建)
- Up(运行中)
- Pause(暂停)
- Exited(退出)
- 查看那些正在运行:docker ps
- 查看所有容器状态:docker ps -a
- 查询所有容器状态 docker container ls -a
9. ps如何查找容器名称
docker ps --format "{{.Names}}"
10. rm / rmi 先删除容器再删镜像
docker rm 容器id
docker rmi 镜像id
或者
docker rmi -f REPOSITORY:TAG
# 比如删除redis镜像:
docker rmi redis (没有冲突时使用)或者 docker rmi redis:latest (有冲突时使用)
使用docker images 查看需要删除镜像的名称和标签
执行命令后,发现镜像被容器(c954b99a5e76)引用:
也可以使用 'docker ps -a ’ 命令查看需要删除的镜像被那些容器引用
找到后执行:
docker rm c954b99a5e76 先删除容器
docker rmi redis 再删除容器
或者强制删除:
docker rmi -f redis
或者删除全部镜像:
docker rmi -f $(docker images -aq)
#列出所有镜像:docker images -a
#列出所有镜像id:docker images -aq
11. prune 移除游离镜像(无用的镜像)
docker image prune
#移除游离镜像 dangling:游离镜像(没有镜像名字的)
12. tag 重命名镜像
docker tag 原镜像:标签 新镜像名:标签
例如:docker tag redis:latest myredis:v1
镜像ID一样,说明是同一个镜像
13. attach / exec 进入容器控制台
attach:绑定到运行中容器的标准输入、输出、错误流(这样似乎也能进入容器内容,但是一定小心,他们操作的就是控制台,控制台的退出命令会生效,比如redis,nginx…)
exec:在运行时的容器内运行命令,不会导致容器退出
docker attach 容器ID或者容器名称 # 绑定的是控制台. 可能导致容器停止。不要用这个
docker exec -it -u 0:0 --privileged mynginx2 /bin/bash # 0用户,以特权方式进入容器
命令解析:
- -i:交互模式
- -t:重新分配
- -u:身份
- 0:0:root的身份root组,指定用户
- –privileged:特权,可以为所欲为
/bin/bash:进入对应的控制台目录
14. inspect 查看容器/镜像的详情(配置文件)
docker(container可以省略) inspect 容器名称或者ID
或者
docker image inspect 镜像名称
# 显示该容器第一个进行的PID
docker inspect -f {{.State.Pid}} 容器ID
15. cp 容器和本地文件系统间 复制 文件/文件夹
把外部的复制进去:docker cp [OPTIONS] 文件或者目录 容器名:存放的路径
docker cp aaa.text nginx:/usr/share/nginx/html
把容器里面的复制出来:docker cp [OPTIONS] 容器名:存放的路径 文件或者目录
docker cp nginx:/etc/nginx/nginx.conf nginx.conf
16. diff 检查容器里文件系统结构的更改
- A:添加文件或目录
- D:文件或者目录删除
- C:文件或者目录更改
docker diff 容器ID或者容器名
17. commit 把容器的改变,提交创建一个新的镜像
docker commit [OPTIONS] 容器 [REPOSITORY[:TAG]]
docker commit -a 作者信息 -m "提交的日志信息" 容器名 新的镜像名:标签
#把新的镜像放到远程docker hub,方便后来在其他机器下载
18. export 导出容器的文件系统为一个tar文件,方便传输
docker export -o nginx.tar e4689b5c752f
19. import 导入tar的内容创建一个镜像
import导入以后变成镜像,并不能直接启动容器
使用 docker image inspect 镜像名,把之前镜像的Entrypoint的所有和Cmd的连接起来就能得到启动命令
或者使用 docker ps --no-trunc 查看正在运行的容器启动命令
拼接后的命令:
docker run -d -P nginx1:v2 /docker-entrypoint.sh nginx -g ‘daemon off;’
20. save/load 保存/加载
save:把一个或者多个镜像保存为tar文件
load:从 tar 文件加载镜像
- docker save -o redis.tar redis:latest 把redis镜像保存成tar文件
- docker load -i redis.tar 把压缩包里面的内容直接导成镜像
21. push 推送镜像到远程
docker push 远程仓库名称/镜像名:标签
或者
docker push docker.io/wufenglei/test:tagname
#腾讯云的镜像地址
https://mirror.ccs.tencentyun.com
#网易的镜像地址
http://hub-mirror.c.163.com
#给远程传:将docker.io修改,仓库网址/名称空间(wufenglei)/仓库名:版本号
sudo docker tag http://hub-mirror.c.163.com/镜像名:标签 wufenglei/test:tagname
sudo docker push http://hub-mirror.c.163.com/wufenglei/test:tagname
- 使用 docker login登录密码存放路径:/root/.docker/config.json
- 怎么知道是否登录了 cat ~/.docker/config.json 有没有 auth的值,没有就是没有登录
- 没有仓库先创建仓库
- 去docker hub查看自己的仓库名
- 必须改名:docker tag nginx1:v1 仓库名/镜像名:标签
- 在docker hub可以查看自己推送的仓库
22. build 构建镜像
3种产生镜像方式:
1. 基于已经存在的容器,提取成镜像
2. 人家给了我tar包,导入成镜像
3. 做出镜像
做出镜像:
1):准备一个文件Dockerfile
vi Dockerfile
2):编写Dockerfile
插入配置内容:
# 基础镜像
FROM redis
#执行的命令
CMD ping baidu.com
3):构建镜像
docker build -t 镜像名:tag -f Dockerfile ./
#-f:指定文件名
# ./:上下文环境,只在当前目录查找Dockerfile文件
#build:根据一个Dockerfile构建出镜像
#commit:正在运行中的容器提交成一个镜像
23. docker的守护进程查看
systemctl status docker
24. docker registry配置和查看
cat /etc/docker/daemon.json
25. 进入容器后台,操作
# 进入镜像的后台
docker exec -it container_id /bin/sh
# 进入镜像的后台,查看进程信息
docker exec -it container_id /bin/bash ps -ef
#查看容器进程信息
docker top container_id
# 查看其父进程信息
ps -ef | grep pid
# 查看子进程信息
ps aux | grep pid
# 查看进程树
pstree -l -a -A pid -p
# 查看容器目录里的进程号
docker exec -d 容器ID pstree -p
docker exec -d 容器ID ps -auxf
docker exec -d 容器ID ll /proc
#查看docker守护进程pid
pidof dockerd
lsof -p pid | wc -l #docker守护进程打开的文件数
27. docker info Docker文件目录
docker info
|-----containers:用于存储容器信息
|-----image:用来存储镜像中间件及本身信息,大小,依赖信息
|-----network
|-----swarm
|-----tmp:docker临时目录
|-----trust:docker信任目录
|-----volumes:docker卷目录
# 查看某个容器的文件目录:
docker exec 容器name ls