Docker容器
docker简介
什么是 Docker - Docker — 从入门到实践 (gitbook.io)
docker hub
Docker Hub Container Image Library | App Containerization
常用命令
$ docker version # 查看docker版本
$ docker images # 列出本机的所有 image 文件。
$ docker image ls # 列出本机的所有 image 文件。
$ docker image rm [imageName] # 删除 image 文件
$ docker pull [OPTIONS] NAME[:TAG|@DIGEST] # 拉取镜像
$ docker container run imageName # 自动抓取并运行容器实例
$ docker run # 自动抓取并运行容器实例 同上
$ docker container stop [containID] # 手动停止容器实例
$ docker container start [containID] # 手动启动容器实例
$ docker container ls # 列出本机正在运行的容器
$ docker ps -a # 列出本机正在运行的容器 同上
$ docker container rm [containerID] # 删除终止运行的容器文件
如果我们没有将当前用户加入到docker的用户组的话, 以上命令都需要sudo, 我们可以使用usermod -aG docker username
来加入到docker用户组, 这样就可以不使用sudo了
拉取镜像
基本命令
docker pull [OPTIONS] NAME[:TAG|@DIGEST] # 拉取镜像
OPTIONS说明:
- -a :拉取所有 tagged 镜像
- --disable-content-trust :忽略镜像的校验,默认开启
实例
docker image pull library/hello-world # 拉取library 组的 hello-world 镜像
library/hello-world
是 image 文件在仓库里面的位置,其中library
是 image 文件所在的组,hello-world
是 image 文件的名字, Docker 官方提供的 image 文件,都放在library
组里面,所以它的是默认组,可以省略
启动镜像
命令
docker container run
常用OPTIONS说明:
- -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
- -d: 后台运行容器,并返回容器ID;
- -i: 以交互模式运行容器,通常与 -t 同时使用;
- -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
- -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
- -e username="ritchie": 设置环境变量;
运行容器流程
docker pull
拉取镜像 , 执行docker image ls 可以查看拉取下来的 image 。docker container run
将image 运行起来生成容器实例,它本身也是一个文件,称为容器文件。
image 文件
Docker 把应用程序及其依赖,打包在 image 文件里面。只有通过这个文件,才能生成 Docker 容器。image 文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。
容器文件
image 文件生成的容器实例,本身也是一个文件,称为容器文件。也就是说,一旦容器生成,就会同时存在两个文件: image 文件和容器文件。而且关闭容器并不会删除容器文件,只是容器停止运行而已。
终止运行的容器文件,依然会占据硬盘空间,可以使用docker container rm
命令删除。
$ docker container rm [containerID]
运行上面的命令之后,再使用docker container ls --all
命令,就会发现被删除的容器文件已经消失了。
Dockerfile 文件
它是一个文本文件,用来配置 image。Docker 根据 该文件生成二进制的 image 文件。
下面是一个生成 image 文件的示例
- 首先,我们项目下新建一个cpp文件,输出hello world。
- 然后,在项目的根目录下,新建一个文本文件
.dockerignore
, 这个文本文件的内容表示要排除的路径
例如
.git
other
- 然后,在项目的根目录下,新建一个文本文件 Dockerfile
FROM gcc:13.2
COPY . /app
WORKDIR /app
RUN g++ hello.c
EXPOSE 3000
CMD ./hello
含义为
FROM gcc:13.2
:该 image 文件继承docker hub 的 gcc image, 冒号表示标签,这里标签是13.2
,即13.2版本的 gcc 。COPY . /app
:将当前目录下的所有文件(除了.dockerignore
排除的路径),都拷贝进入 image 文件的/app
目录。WORKDIR /app
:指定接下来的工作路径为/app
。RUN g++ hello.c
:在/app
目录下,运行g++ hello.c
命令编译。这个命令会在启动之前运行EXPOSE 3000
:将容器 3000 端口暴露出来, 允许外部连接这个端口。CMD ./hello
容器启动后自动执行这条命令
- 使用 docker image build 进行编译
示例
$ docker image build -t hello .
# -t 用来指定 image 文件的名字
编译成功后会生成images文件,使用 docker images
查看
- **然后使用
docker container run hello**
如果一切正常,你的终端就会输出hello world了