操作命令
Docker提供了一组功能强大的操作命令,通过它们可以完成管理、操作等任务。
命令格式:
docker [option] [command] [arguments]
命令说明:
attach Attach local standard input, output, and error streams to a running container
build Build an image from a Dockerfile
commit Create a new image from a container's changes
cp Copy files/folders between a container and the local filesystem
create Create a new container
diff Inspect changes to files or directories on a container's filesystem
events Get real time events from the server
exec Run a command in a running container
export Export a container's filesystem as a tar archive
history Show the history of an image
images List images
import Import the contents from a tarball to create a filesystem image
info Display system-wide information
inspect Return low-level information on Docker objects
kill Kill one or more running containers
load Load an image from a tar archive or STDIN
login Log in to a Docker registry
logout Log out from a Docker registry
logs Fetch the logs of a container
pause Pause all processes within one or more containers
port List port mappings or a specific mapping for the container
ps List containers
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rename Rename a container
restart Restart one or more containers
rm Remove one or more containers
rmi Remove one or more images
run Run a command in a new container
save Save one or more images to a tar archive (streamed to STDOUT by default)
search Search the Docker Hub for images
start Start one or more stopped containers
stats Display a live stream of container(s) resource usage statistics
stop Stop one or more running containers
tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
top Display the running processes of a container
unpause Unpause all processes within one or more containers
update Update configuration of one or more containers
version Show the Docker version information
wait Block until one or more containers stop, then print their exit codes
查看子命令的帮助:
docker docker-subcommand --help
使用镜像
Docker 容器是根据 Docker Image构建的。 默认情况下,Docker 从 Docker Hub 中提取这些镜像,Docker 是 Docker 项目背后的公司,管理着 Docker 注册中心。 任何人都可以在 Docker Hub 上托管他们的 Docker 映像,所以你需要的大多数应用程序和 Linux 发行版都会在那里托管映像。
测试是否可用
docker run hello-world
Docker 最初无法在本地找到 hello-world 映像,因此它从 Docker Hub (默认存储库)下载了这个映像。 下载IMage后,Docker 根据Image和执行的容器内的应用程序创建一个容器,显示消息。
常用命令
搜索镜像
magc@magc-ThinkPad-T480:~$ docker search ubuntu
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating sys… 10811 [OK]
dorowu/ubuntu-desktop-lxde-vnc Docker image to provide HTML5 VNC interface … 419 [OK]
rastasheep/ubuntu-sshd Dockerized SSH service, built on top of offi… 244 [OK]
consol/ubuntu-xfce-vnc Ubuntu container with "headless" VNC session… 214 [OK]
ubuntu-upstart Upstart is an event-based replacement for th… 106 [OK]
ansible/ubuntu14.04-ansible Ubuntu 14.04 LTS with ansible 98 [OK]
neurodebian NeuroDebian provides neuroscience research s… 68 [OK]
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5 ubuntu-16-nginx-php-phpmyadmin-mysql-5 50 [OK]
ubuntu-debootstrap debootstrap --variant=minbase --components=m… 44 [OK]
nuagebec/ubuntu Simple always updated Ubuntu docker images w… 24 [OK]
i386/ubuntu Ubuntu is a Debian-based Linux operating sys… 19
1and1internet/ubuntu-16-apache-php-5.6 ubuntu-16-apache-php-5.6 14 [OK]
1and1internet/ubuntu-16-apache-php-7.0 ubuntu-16-apache-php-7.0 13 [OK]
eclipse/ubuntu_jdk8 Ubuntu, JDK8, Maven 3, git, curl, nmap, mc, … 12 [OK]
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mariadb-10 ubuntu-16-nginx-php-phpmyadmin-mariadb-10 11 [OK]
1and1internet/ubuntu-16-nginx-php-5.6-wordpress-4 ubuntu-16-nginx-php-5.6-wordpress-4 7 [OK]
1and1internet/ubuntu-16-apache-php-7.1 ubuntu-16-apache-php-7.1 6 [OK]
darksheer/ubuntu Base Ubuntu Image -- Updated hourly 5 [OK]
pivotaldata/ubuntu A quick freshening-up of the base Ubuntu doc… 4
1and1internet/ubuntu-16-nginx-php-7.0 ubuntu-16-nginx-php-7.0 4 [OK]
pivotaldata/ubuntu16.04-build Ubuntu 16.04 image for GPDB compilation 2
smartentry/ubuntu ubuntu with smartentry 1 [OK]
1and1internet/ubuntu-16-php-7.1 ubuntu-16-php-7.1 1 [OK]
pivotaldata/ubuntu-gpdb-dev Ubuntu images for GPDB development 1
1and1internet/ubuntu-16-sshd ubuntu-16-sshd 1 [OK]
更换国内Docker仓库
在服务器本机的/etc/docker/下新建daemon.json,并输入以下内容:如果需要更换不同的镜像地址,直接替换掉“https://alzgoonw.mirror.aliyuncs.com”即可
{
"registry-mirrors": ["https://alzgoonw.mirror.aliyuncs.com"]
}
重启并加载配置:
systemctl daemon-reload //载入daemon.json
systemctl restart docker //重启docker
查看是否生效:
通过docker info命令,可以在底部看到仓库地址已经更新了。
下载镜像
docker pull ubuntu
在下载了一个映像之后,您可以使用 run 子命令使用下载的映像运行一个容器。 正如您在 hello-world 示例中看到的那样,如果使用 run 子命令执行 Docker 时没有下载映像,Docker 客户机将首先下载映像,然后使用它运行一个容器。
查看本地镜像
magc@magc-ThinkPad-T480:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 4e5021d210f6 4 weeks ago 64.2MB
本地的镜像可以运行形成容器,它可以被修改,生成新的镜像文件,
运行容器
使用镜像启动容器
作为一个例子,让我们使用最新的 Ubuntu 映像运行一个容器。 I 和 t 开关的组合使您可以对容器进行交互式 shell 访问:
docker run -it ubuntu
注:其中i和t参数的组合会使你可以使用与容器进行交互式的Shell
启动后,将得到类似下面的终端提示:
root@d9b100f2f636:/#
注意命令提示符中的容器 id。 在这个示例中,它是 d9b100f2f636。 稍后您将需要该容器 ID 来标识需要移除的容器。
现在,您可以在容器内运行任何命令。 例如,让我们更新容器内的包数据库。 你不需要给任何命令加上 sudo 的前缀,因为你是以 root 用户的身份在容器中操作的:
apt-get update
这里试着安装一下nodejs:
sudo apt-get install nodejs
安装之后,查看Nodejs的版本:
node -v
注:在容器中所作的修改只适用于当前容器。直接退出后将消失。
退出容器
使用exit命令来退出当前容器
exit
管理Docker
查看容器
使用 Docker 一段时间后,您的计算机上将有许多活动(正在运行)和非活动容器。 要查看活动的文件,请使用:
# 查看活动的容器
docker ps
# 查看所有容器(活动的和非活动的)
docker ps -a
# 查看最新创建的容器
docker ps -l
例如:
magc@magc-ThinkPad-T480:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cb997f81f82c ubuntu "/bin/bash" 2 minutes ago Exited (127) 30 seconds ago charming_dewdney
6e5462d590b6 ubuntu "/bin/bash" 8 minutes ago Exited (0) 3 minutes ago modest_blackburn
magc@magc-ThinkPad-T480:~$ docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cb997f81f82c ubuntu "/bin/bash" 4 minutes ago Exited (127) 2 minutes ago charming_dewdney
启动容器
若要启动已停止的容器,请使用 docker start,后跟容器 ID 或容器名称。 让我们启动 ID 为 cb997f81f82c的基于 ubuntu 的容器:
magc@magc-ThinkPad-T480:~$ docker start cb997f81f82c
cb997f81f82c
magc@magc-ThinkPad-T480:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cb997f81f82c ubuntu "/bin/bash" 7 minutes ago Up 12 seconds charming_dewdney
注: 启动新容器时,可以通过参数 --name 来指定一个名字, 还可以使用–rm参数,代表该容器停止时就自动删除
连接到正在运行的容器
先找到要连接的容器的ID,
docker exec -it /bin/bash
停止容器
若要停止正在运行的容器,请使用 docker stop,后跟容器 ID 或名称。
magc@magc-ThinkPad-T480:~$ docker stop cb997f81f82c
cb997f81f82c
magc@magc-ThinkPad-T480:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
删除容器
当您决定不再需要容器时,使用 docker rm 命令移除它,同样使用容器 ID 或者名称。 使用 docker ps-a 命令查找与 hello-world 映像关联的容器的容器 ID 或名称并将其删除。
注:容器可以转换成IMage,您可以使用这些IMage构建新的容器。
保存容器的修改到镜像中
启动 Docker 映像时,您可以像使用虚拟机一样创建、修改和删除文件。 您所做的更改只适用于该容器。 您可以启动和停止它,但是一旦使用 docker rm 命令销毁它,更改将永远丢失。
在这里,我们将展示如何将容器中修改保存到镜像中,以便下次直接使用最新的镜像内容。
例如,在上面我们在ubuntu的一个容器中安装了Nodejs,此时容器的状态与原始镜像已经不同,如果我们想将最新的变更保存到镜像中,以便后面可以直接使用成果,可以用下面的办法,生成一个新的镜像:
magc@magc-ThinkPad-T480:~$ docker commit -m "added Nodejs" -a "magc" 6e5462d590b6 magc/ubuntu-nodejs
sha256:824e7cdb2d5020ea901474b6b5d764ae5dc97c23223ee95c0bf17f60f1943ab1
查看本地的镜像:
magc@magc-ThinkPad-T480:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
magc/ubuntu-nodejs latest 824e7cdb2d50 28 seconds ago 153MB
ubuntu latest 4e5021d210f6 4 weeks ago 64.2MB
可以发现,其中magc/ubuntu-nodejs 就是新生成的镜像文件,大小已经比原来ubuntu镜像大了不少。