1.常用操作
1.查找镜像
docker search 需要的镜像
2.拉取镜像
docker pull 镜像名:tag
3.列出镜像
docker images
4.删除镜像
docker rmi 镜像ID/镜像名
5.设置镜像标签
docker tag 镜像ID/镜像名 michael/centos:v1
6.启动容器
docker start 容器ID/容器名
7.停止容器
docker stop 容器ID/容器名
8.重启容器
docker restart 容器ID/容器名
9.查看容器
docker ps(正在运行的)
docker ps -a(所有的)
docker ps -l(最后一次创建的)
10.删除容器
docker rm 容器ID/容器名
docker container prune(删除所有停止运行的容器)
11.进入容器
docker exec -it 容器ID/容器名 /bin/bash
12.查看容器端口
docker port 容器ID/容器名(docker ps也可以看到,这个更详细)
13.查看容器日志
docker logs -f 容器ID/容器名
-f: 像tail -f方式输出
14.查看容器进程
docker top 容器ID/容器名
15.检查容器
docker inspect 容器ID/容器名
docker inspect 容器ID或NAMES | grep IPAddress(查看容器IP)
16.命名容器
docker run -d --name runoob training/webapp python app.py
17.挂载目录
docker run -p 3306:3306 --name mysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
-p 3306:3306: 将容器的3306端口映射到主机的3306端口(第一个为本机,第二个为容器)
--name mysql: 将容器命名为mysql
-v $PWD/conf:/etc/mysql/conf.d: 将主机中当前目录下的conf挂载到容器的/etc/ysql/conf.d
-e MYSQL_ROOT_PASSWORD=123456: 初始化root用户密码
18.显示docker的详细信息
# 可以看到registry等
docker info
19.类似linux top
docker top 容器ID/名称
20.实时打印所有容器占用资源状态
docker stats
2.文件的交互
1.本地文件上传到docker容器中
docker cp 本地路径 容器ID或名字:绝对路径
docker cp ~/Desktop/1.jpg master:/home/src
2.docker容器文件下载到本地
docker cp 容器ID或名字:绝对路径 本地路径
docker cp master:/home/src/1.jpg ~/Desktop
3.运行容器
3.1 直接运行
docker run ubuntu:15.10 /bin/echo "Hello World"
docker: docker的二进制执行文件
run: 与前面的docker组合来运行一个容器
ubuntu: 15.10指定要运行的镜像,docker首先从本地主机上查找镜像是否存在,
如果不存在,Docker就会从镜像仓库Docker Hub下载公共镜像
/bin/echo "Hello world": 在启动的容器里执行的命令
以上命令完整的意思可以解释为:docker以ubuntu15.10镜像为模板创建一个新容器,
然后在容器里执行bin/echo "Hello world",最后输出结果
3.2 交互式运行
docker run -it ubuntu:15.10 /bin/bash
-t: 在新容器内指定一个伪终端或终端
-i: 允许你对容器内的标准输入(STDIN)进行交互
此时我们已进入一个ubuntu15.10系统的容器,我们尝试在容器中运行命令cat /proc/version和ls
分别查看当前系统的版本信息和当前目录下的文件列表
3.3 后台运行
docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
在输出中,我们没有看到期望的"hello world",而是一串长字符2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63,
这个长字符串叫做容器ID,对每个容器来说都是唯一的,我们可以通过容器ID来查看对应的容器发生了什么
3.4 运行web应用
1.载入镜像
docker pull training/webapp
2.后台运行镜像
docker run -d training/webapp python app.py
3.查看正在运行的容器
docker ps
容器ID |
镜像名称 |
命令 |
… |
端口 |
CONTAINER ID |
IMAGE |
COMMAND |
… |
PORTS |
d3d5e39ed9d3 |
training/webapp |
“python app.py” |
… |
0.0.0.0:32769->5000/tcp |
# docker开放了5000端口(默认python flask端口)映射到主机端口32769上,这时我们可以通过浏览器访问web应用(http://127.0.0.1:32769)
# 我们也可以通过-p参数来设置不一样的端口
docker run -d -p 5000:5000 training/webapp python app.py
5000:5000 第一个为本机端口,第二个为docker内部的5000端口
4.网络端口的快捷方式
# 通过docker ps命令可以查看到容器的端口映射,docker还提供了另一个快捷方式docker port
# 使用docker port可以查看指定(ID或者NAMES)容器的某个确定端口映射到宿主机的端口号
# 上面我们创建的web应用容器ID为bf08b7f2cd89名字为wizardly_chandrasekhar
# 我们可以使用以下两种方式来查看容器端口的映射情况
docker port bf08b7f2cd89
docker port wizardly_chandrasekhar
5.查看WEB应用程序日志
docker logs -f bf08b7f2cd89
6.查看WEB应用程序容器的进程
docker top
7.检查WEB应用程序
docker inspect wizardly_chandrasekhar
[
{
"Id": "bf08b7f2cd897b5964943134aa6d373e355c286db9b9885b1f60b6e8f82b2b85",
"Created": "2018-09-17T01:41:26.174228707Z",
"Path": "python",
"Args": [
"app.py"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 23245,
"ExitCode": 0,
"Error": "",
"StartedAt": "2018-09-17T01:41:26.494185806Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
......
3.5 去掉命令以sudo运行限制
1.添加docker组(一般已经存在)
sudo groupadd docker
2.将当前用户添加进docker组(vagrant用户)
sudo gpasswd -a vagrant docker
3.重启docker
sudo systemctl restart docker
# 如果还失败,则退出shell,再重新进入就可以
3.6 清除容器
# 列出所有容器的ID
docker container ls -aq
docker ps -aq
# awk的方式会输出第一列,即docker的id,但与上面稍有不同,会带表头CONTAINER
docker container ls -a | awk {'print$1'}
docker ps -a | awk {'print$1'}
# 清除掉所有的容器
docker rm $(docker ps -aq)
# 清除所有的退出的容器
docker rm $(docker ps -f "status=exited" -q)
3.7 容器资源限制
-memory
-memory-swap
# 如果只设置了memory没有设置memory-swap,则memory-swap=memory