快速参考#
参考:Docker 小技巧
Docker 命令行的基本使用
docker + 管理对象(比如容器,镜像) + 具体操作(比如创建,启动,停止,删除)
例子
docker image pull nginx
拉取nginx
的 docker 镜像docker container stop web
停止web
的 docker 容器
镜像 vs 容器#
容器基本操作#
操作 |
命令(全) |
命令(简) |
---|---|---|
容器的创建 |
|
|
容器的列出(up) |
|
|
容器的列出(up和exit) |
|
|
容器的停止 |
|
|
容器的删除 |
|
|
小技巧
docker container stop cd3 269 34b 751
批量删除docker container stop $(docker container ps -aq)
批量删除docker system prune -a -f
可以快速对系统进行清理,删除停止的容器,不用的镜像,等等。
例子
docker container run -d --publish 80:80 --name webhost nginx
在本地查找是否有
nginx
镜像,但是没有发现;去远程的 image registry 查找
nginx
镜像(默认的 registry 是 Docker Hub)下载最新版本的
nginx
镜像 (nginx:latest
默认)基于
nginx
镜像来创建新的容器,并且准备运行docker engine 给这个容器分配虚拟 IP 地址
在宿主机上打开 80 端口并把容器的 80 端口转发到宿主机上
启动容器,运行指定的命令(这里是 shell 脚本去启动 nginx)
镜像管理和发布#
镜像基本操作#
查看基本功能:
!docker image
Usage: docker image COMMAND
Manage images
Commands:
build Build an image from a Dockerfile
history Show the history of an image
import Import the contents from a tarball to create a filesystem image
inspect Display detailed information on one or more images
load Load an image from a tar archive or STDIN
ls List images
prune Remove unused images
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rm Remove one or more images
save Save one or more images to a tar archive (streamed to STDOUT by default)
tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
Run 'docker image COMMAND --help' for more information on a command.
比如:
!docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
Digest: sha256:790711e34858c9b0741edffef6ed3d8199d8faa33f2870dea5db70f16384df79
Status: Image is up to date for nginx:latest
docker.io/library/nginx:latest
指定版本:
!docker pull nginx:1.20.0
1.20.0: Pulling from library/nginx
2152171a: Pulling fs layer
15a5cec8: Pulling fs layer
b026b9ce: Pulling fs layer
dc384fb3: Pulling fs layer
372d6dee: Pulling fs layer
Digest: sha256:ea4560b87ff03479670d15df426f7d02e30cb6340dcd3004cdfc048d6a1d54b4
Status: Downloaded newer image for nginx:1.20.0
docker.io/library/nginx:1.20.0
从 Quay 上拉取镜像:
!docker pull quay.io/bitnami/nginx
Using default tag: latest
Error response from daemon: unauthorized: access to the requested resource is not authorized
Dockerfile 基本结构#
Docker 可以通过从 Dockerfile
中读取指令来自动构建映像。Dockerfile 是文本文档,它包含用户可以在命令行上调用的所有命令来组装镜像。
比如在 Ubuntu 系统下创建简单的 Python 环境:
FROM ubuntu:20.04
RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y python3.9 python3-pip python3.9-dev
ADD hello.py /
CMD ["python3", "/hello.py"]
scratch 镜像#
Scratch 是空白 Docker 镜像。
通过 scratch 来构建基础镜像。
#include <stdio.h>
int main()
{
printf("hello docker\n");
}
编译成二进制文件
$ gcc --static -o hello hello.c
$ ./hello
hello docker
$
FROM scratch
ADD hello /
CMD ["/hello"]
构建
$ docker build -t hello .
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
hello latest 2936e77a9daa 40 minutes ago 872kB
运行
$ docker container run -it hello
hello docker
Docker 数据存储#
默认情况下,在运行中的容器里创建的文件,被保存在可写的容器层:
如果容器被删除了,则数据也没有了
这个可写的容器层是和特定的容器绑定的,也就是这些数据无法方便的和其它容器共享
Docker 主要提供了两种方式做数据的持久化
Data Volume:由 Docker 管理(
/var/lib/docker/volumes/
Linux), 持久化数据的最好方式Bind Mount,由用户指定存储的数据具体 mount 在系统什么位置