Version: Next

Docker常用命令

Docker基本原理

  • Docker是一个Client-Server结构的系统,Docker的守护进程(DockerServer中)运行在宿主机上,通过Socket从客户端访问
  • DockerServer接收到Docker Client的指令,就会执行该命令

12

Docker为什么比虚拟机快

  1. Docker具有比虚拟机更少的抽象层
  2. Docker利用宿主机操作系统内核。虚拟机需要自己构成虚拟操作系统内核

image-20200520201357833

Docker帮助命令

查看版本

docker version

查看信息

docker info

帮助命令

docker 命令--help

官方命令文档地址

  • https://docs.docker.com/reference/

镜像命令

docker images

查看所有本地镜像

docker images [OPTIONS] [REPOSITORY[:TAG]]
Name, shorthandDefaultDescription
--all , -aShow all images (default hides intermediate images)
--digestsShow digests
--filter , -fFilter output based on conditions provided
--formatPretty-print images using a Go template
--no-truncDon’t truncate output
--quiet , -qOnly show numeric IDs

docker images

root@ubuntu:/# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 4 months ago 13.3kB

结果列含义:

  • REPOSITORY——镜像仓库源(通过该名字下载和运行)
  • TAG——镜像标签,版本信息
  • IMAGE ID——镜像ID
  • CREATED——镜像的创建时间
  • SIZE——镜像的大小

docker images -q - 只显示镜像id

docker images -aq - 以ID形式显示所有镜像

docker search

我们可以去Docker Hub网站搜索镜像,也可以使用docker search命令,搜索镜像

docker search [OPTIONS] TERM
Name, shorthandDefaultDescription
--automateddeprecated Only show automated builds
--filter , -fFilter output based on conditions provided
--formatPretty-print search using a Go template
--limit25Max number of search results
--no-truncDon’t truncate output
--stars , -sdeprecated Only displays with at least x stars

测试

docker search mysql

查看STAR数大于3000的镜像

docker search mysql --filter=STARS=3000

docker pull

下载镜像

docker pull [OPTIONS] NAME[:TAG|@DIGEST]
Name, shorthandDefaultDescription
--all-tags , -aDownload all tagged images in the repository
--disable-content-trusttrueSkip image verification
--platformexperimental (daemon)API 1.32+ Set platform if server is multi-platform capable
--quiet , -qSuppress verbose output

指定版本下载

  • 下载Mysql 5.7
docker pull mysql:5.7
root@ubuntu:/# docker pull mysql:5.7
5.7: Pulling from library/mysql
afb6ec6fdc1c: Pull complete
0bdc5971ba40: Pull complete
97ae94a2c729: Pull complete
f777521d340e: Pull complete
1393ff7fc871: Pull complete
a499b89994d9: Pull complete
7ebe8eefbafe: Pull complete
4eec965ae405: Pull complete
a531a782d709: Pull complete
10e94c02b508: Pull complete
799a94b968ef: Pull complete
Digest: sha256:5c9fd7949bc0f076429fa2c40d0e7406e095bdb5216a923257b31972a6f3ae4f
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7

分层下载,Digest为摘要,docker.io为真实地址

如果此时在下载Mysql 8.0,会发现很多层是公用的,就不用下载了

docker rmi

删除镜像remove image

docker rmi [OPTIONS] IMAGE [IMAGE...]
  • 可以根据镜像名(Repository属性)删除
  • 可以根据镜像ID删除
Name, shorthandDefaultDescription
--force , -fForce removal of the image
--no-pruneDo not delete untagged parents

删除所有镜像

  • $传递参数,查询所有镜像,递归删除
docker rmi -f $(docker images -aq)

删除多个镜像

docker rmi ID1 ID2 ID3

容器命令

必须有镜像才能创建容器,下载一个centos镜像来进行学习

docker pull centos

docker run

新建并启动一个容器

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

常用参数:

  • --name——给容器起个名字
  • -d——以后台方式运行
  • -it——使用交互方式运行,进入容器查看内容
  • -p——指定容器端口,可以设置宿主机映射
    • -p ip:主机端口:容器端口
    • -p 主机端口:容器端口(常用)
    • -p 容器端口
  • -P——随即指定端口

测试——运行刚才下载的centos镜像

  • -it——使用交互方式
  • centos——镜像名
  • /bin/bash——指定控制台
docker run -it centos /bin/bash

终端回显

root@ubuntu:/# docker run -it centos /bin/bash
[root@a662d700eebd /]#

root@a662d700eebd说明已经进入容器了,进入了我们刚才现在的centos操作系统

  • 退出
exit
  • 退出但不停止容器

快捷键ctrl + p + q

docker ps

  • 查看当前运行容器
docker ps
  • 查看曾经运行过的容器-a
docker ps -a

运行后可以看到我们运行过的hello-worldcentos镜像

  • 显示最近创建的容器-n
    • 显示最近创建的一个容器
docker ps -a -n=1
  • 只显示容器编号-q
    • 显示所有容器编号
docker ps -aq

docker rm

  • 删除容器
docker rm 容器Id
  • 删除全部容器
docker rm -f $(docker ps -aq)

使用管道符|删除

docker ps -a -q | xargs docker rm

docker start

启动一个停止的容器

docker start 容器id

重启一个容器

docker restart 容器id

docker stop

停止一个正在运行的容器

docker stop 容器id

docker kill

暴力杀死一个容器

docker kill 容器id

常用其他命令

docker run -d *

后台启动容器

通过docker run -d 镜像,使用docker ps发现后台容器停止了

警告

docker容器使用后台运行,必须要有一个前台进程,否则docker发现没有应用就会自动停止

docker logs

查看docker日志

查看最后十条10日志 -t时间戳;-ffollow格式化

docker logs -tf --tail 10 31df4ec1492a

docker top

查看容器容器中的进程信息

docker top 容器id

docker inspect *

查看容器内部元数据

docker inspect 容器id

docker exec *

进入一个容器,-it以交互模式进入; /bin/bash指定控制台

docker exec -it 容器id /bin/bash

docker attach *

进入一个容器

docker attach 容器id /bin/bash

正在执行当前的代码

docker execdocker attach的区别

  • docker exec——进入容器后,开启一个新终端,可以执行命令
  • docker attach——进入容器正在执行的终端

docker cp

从容器内拷贝文件到宿主机上

docker cp 容器id:容器内路径 目标主机路径

Docker 命令图

1

Mac Iterm2 配合 Docker 在当前路径生成 ubuntu 容器环境

  • 在使用 zsh shell 的情况下,使用编辑 ~/.zshrc 文件,添加三个函数即可
# quick start a Ubuntu OS in Current Folder
run-ubuntu() {
local -r DIR_NAME="$(basename $(pwd))"
docker run -td \
-v "$(pwd)":"/${DIR_NAME}" \
-w "/${DIR_NAME}" \
--name "${DIR_NAME}" \
ubuntu:18.04 \
bash
}
enter-ubuntu() {
local -r NAME="${1:-$(basename $(pwd))}"
docker exec \
--detach-keys "ctrl-@" \
-it "${NAME}" \
bash
}
rm-ubuntu() {
local -r NAME="${1:-$(basename $(pwd))}"
docker rm -f "${NAME}"
}
# quick start a Ubuntu OS in Current Folder