在Ubuntu上学习使用docker命令,学习生命周期,使用docker->service开机启动docker,学习docker run
【测试docker是否正确安装】
【自启动】
【使用dockerfile定制镜像】
指令最后一个 . 是上下文路径,那么什么是上下文路径呢?
$ docker build -t nginx:v3 .
上下文路径,是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包。
解析:由于 docker 的运行模式是 C/S。我们本机是 C,docker 引擎是 S。实际的构建过程是在 docker 引擎下完成的,所以这个时候无法用到我们本机的文件。这就需要把我们本机的指定目录下的文件一起打包提供给 docker 引擎使用。
【创建了一个标签为v3的nginx镜像】
【docker compose】
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
Compose 使用的三个步骤:
-
使用 Dockerfile 定义应用程序的环境。
-
使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
-
最后,执行 docker-compose up 命令来启动并运行整个应用程序。
【docker容器状态和生命周期】
获取容器状态指令:
docker ps -a
网上说的有很多,而且都不一样,核心状态有五个,如图所示
用来创建容器create
在一个运行状态的容器中执行命令exec
杀死运行中的容器kill
让容器暂停pause
恢复容器unpause
重启容器restart
新建并初始化一个容器(注意 是一个新的容器) run
启动一个被停止的容器start
暂停运行中的容器stop
【Docker run 命令】
docker run 命令用于创建并启动一个新的容器。
语法
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
常用参数说明:
-
-d
: 后台运行容器并返回容器 ID。 -
-it
: 交互式运行容器,分配一个伪终端。 -
--name
: 给容器指定一个名称。 -
-p
: 端口映射,格式为host_port:container_port
。 -
-v
: 挂载卷,格式为host_dir:container_dir
。 -
--rm
: 容器停止后自动删除容器。 -
--env
或-e
: 设置环境变量。 -
--network
: 指定容器的网络模式。 -
--restart
: 容器的重启策略(如no
、on-failure
、always
、unless-stopped
)。 -
-u
: 指定用户。
实例
1. 基本使用
docker run ubuntu
拉取 ubuntu 镜像并在前台启动一个容器。
2. 后台运行容器
docker run -d ubuntu
在后台运行 ubuntu 容器并返回容器 ID。
3. 交互式运行并分配终端
docker run -it ubuntu /bin/bash
以交互模式运行 ubuntu 容器,并启动一个 Bash shell。
4. 指定容器名称
docker run --name my_container ubuntu
运行一个 ubuntu 容器,并将其命名为 my_container。
5. 端口映射
docker run -p 8080:80 nginx
将本地主机的 8080 端口映射到容器内的 80 端口,运行 nginx 容器。
6. 挂载卷
docker run -v /host/data:/container/data ubuntu
将主机的 /host/data 目录挂载到容器内的 /container/data 目录。
7. 设置环境变量
docker run -e MY_ENV_VAR=my_value ubuntu
设置环境变量 MY_ENV_VAR 的值为 my_value,运行 ubuntu 容器。
8. 使用网络模式
docker run --network host nginx
使用主机的网络模式运行 nginx 容器。
9. 指定重启策略
docker run --restart always nginx
设置容器的重启策略为 always,即使容器停止也会自动重启。
10. 指定用户
docker run -u user123 ubuntu
以 user123 用户运行 ubuntu 容器。
11. 组合多个选项
docker run -d -p 8080:80 -v /host/data:/data --name webserver nginx
后台运行一个命名为 webserver 的 nginx 容器,将主机的 8080 端口映射到容器的 80 端口,并将主机的 /host/data 目录挂载到容器的 /data 目录。