1.常用操作

  1. 1.查找镜像
  2. docker search 需要的镜像
  3. 2.拉取镜像
  4. docker pull 镜像名:tag
  5. 3.列出镜像
  6. docker images
  7. 4.删除镜像
  8. docker rmi 镜像ID/镜像名
  9. 5.设置镜像标签
  10. docker tag 镜像ID/镜像名 michael/centos:v1
  11. 6.启动容器
  12. docker start 容器ID/容器名
  13. 7.停止容器
  14. docker stop 容器ID/容器名
  15. 8.重启容器
  16. docker restart 容器ID/容器名
  17. 9.查看容器
  18. docker ps(正在运行的)
  19. docker ps -a(所有的)
  20. docker ps -l(最后一次创建的)
  21. 10.删除容器
  22. docker rm 容器ID/容器名
  23. docker container prune(删除所有停止运行的容器)
  24. 11.进入容器
  25. docker exec -it 容器ID/容器名 /bin/bash
  26. 12.查看容器端口
  27. docker port 容器ID/容器名(docker ps也可以看到,这个更详细)
  28. 13.查看容器日志
  29. docker logs -f 容器ID/容器名
  30. -f: tail -f方式输出
  31. 14.查看容器进程
  32. docker top 容器ID/容器名
  33. 15.检查容器
  34. docker inspect 容器ID/容器名
  35. docker inspect 容器IDNAMES | grep IPAddress(查看容器IP)
  36. 16.命名容器
  37. docker run -d --name runoob training/webapp python app.py
  38. 17.挂载目录
  39. 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
  40. -p 3306:3306: 将容器的3306端口映射到主机的3306端口(第一个为本机,第二个为容器)
  41. --name mysql: 将容器命名为mysql
  42. -v $PWD/conf:/etc/mysql/conf.d: 将主机中当前目录下的conf挂载到容器的/etc/ysql/conf.d
  43. -e MYSQL_ROOT_PASSWORD=123456: 初始化root用户密码
  44. 18.显示docker的详细信息
  45. # 可以看到registry等
  46. docker info
  47. 19.类似linux top
  48. docker top 容器ID/名称
  49. 20.实时打印所有容器占用资源状态
  50. 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