使用Docker时,需要使用Docker命令行工具docker与 Docker daemon(Docker守护进程,负责接收并分发执行Docker命令)建立通信。
简单来说:在使用docker所有命令,都需要 docker [OPTIONS] COMMAND
$ sudo docker
Usage: docker [OPTIONS] COMMAND
A self-sufficient runtime for containers
Options:
--config string Location of client config files (default "/root/.docker")
-c, --context string Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and default context set with "docker context use")
-D, --debug Enable debug mode
-H, --host list Daemon socket(s) to connect to
...
注意:docker命令一般都需要root权限——命令前加sudo
$ sudo docker start --help
Usage: docker start [OPTIONS] CONTAINER [CONTAINER...]
Start one or more stopped containers
Options:
-a, --attach Attach STDOUT/STDERR and forward signals
--detach-keys string Override the key sequence for detaching a container
-i, --interactive Attach container's STDIN
docker info命令可以输出docker的配置信息
$ sudo docker info
Client:
Context: default
...
Server:
Containers: 2
Running: 1
Paused: 0
Stopped: 1
Images: 1
Server Version: 20.10.2
...
Kernel Version: 4.15.0-124-generic
Operating System: Ubuntu 18.04.5 LTS
...
使用方法 docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
docker run命令用来基于指定的镜像创建一个容器,并根据OPTIONS来控制该容器。
$ sudo docker run -i -t --name mytest python:3.6 /bin/bash
#参数解释
-i 表示使用交互模式,即容器运行时还接收终端的输入
-t 表示分配一个伪终端,即容器运行时,为容器内的环境打开一个终端
--name 指定运行的容器名(python:3.6),其中的3.6是一个image TAG,用于区分同名镜像
/bin/bash 表示使用bash shell来进行命令解析
#除此之外,在web开发中常用的参数
-p 将容器的端口暴露(映射)给宿主机的端口,使得可以通过宿主机的HostPost:ContainerPort访问Web应用
#后台运行容器,即容器不会开启新的命令行,也不会因为没有被使用到而’自杀‘
$ sudo docker run -d --name mytest python:3.6
※只有-t,没有/bin/bash,表现为:分配了伪终端,但未给出该伪终端的shell(个人理解为命令输入框)
对于linux的shell,这篇博客讲的比较清楚:https://www.cnblogs.com/tjudzj/p/7088543.html
对于已经存在的容器,使用docker start ContarinerID 启动容器
$ sudo docker start -i bbed11094489
#参数说明
-i 表示开放输入流
从官方仓库Docker Hub拉取Image,常用指令如下
#从官方拉取ubuntu:latest镜像
$ sudo docker pull ubuntu
#从官方拉取指定Tag的镜像
$ sudo docker pull ubuntu:ubuntu12.04
#从特点的仓库拉取镜像
$ sudo docker pull SEL/ubuntu
#从其他服务器拉取镜像
$ sudo docker pull 10.10.103.215:5000/sshd
docker拉取镜像时首先从国外仓库拉取,速度很慢,需要修改为国内企业提供的镜像仓库(阿里云为例)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://*****.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
将本地Image上传至Docker Hub
#上传至Hub的指定位置
$ sudo docker push SEL/ubuntu
使用格式 docker images [OPTIONS] [REPOSITORY] [:TAG]
$ sudo docker images
#输出:可看出Image的基本信息
REPOSITORY TAG IMAGE ID CREATED SIZE
python 3.6 6b0219e0ed75 3 days ago 874MB
docker rm ContarinerID 用来删除容器
docker rmi ImageID 用来删除镜像
注意:当存在容器时,无法删除对于的镜像,需要加 -f 强制删除存在容器的镜像或者运行中的容器
连接到正在运行的容器,观察该容器的运行情况
$ sudo docker attach ID
$ sudo docker ps #查看正在运行的容器
#输出样例
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bbed11094489 python:3.6 "python3" 4 hours ago Up 5 minutes mytest1
$ sudo docker ps -a #查看所有的容器(运行+未运行)
root@iZ2ze2tw7cm243uv3wr3e6Z:~# sudo docker ps -a
#输出样例
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bbed11094489 python:3.6 "python3" 4 hours ago Up 7 minutes mytest1
7302db7765fc python:3.6 "/bin/bash" 4 hours ago Exited (130) 4 hours ago mytest
$ sudo docker commit ContainerID #将正在运行的容器制作为新的镜像-官方不推荐
$ sudo docker events #查看Docker的实时系统事件
$ sudo docker history ImageID #查看Docker镜像的历史版本信息
$ sudo docker logs ContarinerID #查看Docker中容器的运行日志,通常用来找报错原因