🪞docker 学习笔记
type
status
date
slug
summary
tags
category
icon
password
Basic commands
image 和 container 的关系
- 镜像是容器的蓝图:镜像就像是一个静态的模板,而容器是这个模板的一个动态实例。每次启动容器时,Docker 都会基于指定的镜像创建一个新的容器。
- 容器是镜像的运行时实例:镜像本身并不会执行任何操作,只有通过容器才能运行应用程序。因此,镜像相当于应用程序的“静态包装”,容器则是应用程序的“执行环境”。
- 容器可以基于镜像进行修改:容器运行时可以对其内部文件系统进行更改,如修改配置文件、安装软件等。这些修改只会影响当前容器,容器被销毁时,所有修改也会丢失。若要保留这些修改,可以将容器的状态保存为一个新的镜像。
list containers
docker ps
列出所有正在运行的容器
docker ps -a
列出所有容器(无论是否正在运行)
stop a container
docker stop container_name
remove a container
docker rm container_name
list images
docker images
remove images
docker rmi image_name
download an image
docker pull image_name
append a command
docker run ubuntu sleep 5
execute a command
docker exec container_name cat /etc/hosts
attach and detach
docker run -d image_name
docker attach container_name
Docker run
tag
docker run redis:4.0
stdin
-i
选项使容器保持标准输入(STDIN)打开,从而可以与容器进行交互。- 它允许你通过命令行与容器通信,比如输入命令或提供输入数据。
- 即使你不附加终端,
i
也会确保容器的 STDIN 处于开启状态。 - 常用于需要与容器内部进程交互的场景,如通过容器运行一个交互式 shell。
-t
选项分配一个伪终端(pseudo-TTY)并将其附加到容器中。- 它让你感觉像是在一个真实的终端中工作。
- 常用于交互式的命令行工具,例如 Bash。
- 如果没有
t
,即使你使用了i
,终端显示的内容可能格式混乱(比如没有换行符等)。
- 将
-i
和-t
一起使用,提供了一个完全交互式的终端体验。 docker run -it ubuntu bash
port mapping
Docker 的
-p
参数用于将容器的端口映射到主机的端口,使主机上的用户可以通过特定的端口访问容器中的服务。docker run -p 8080:80 nginx
docker run -p 127.0.0.1:8080:80 nginx
docker run -p 80 nginx
- 如果不指定
host_port
,Docker 会为容器的80
端口随机分配一个主机端口。 - 使用
docker ps
查看随机分配的端口。
Volume mapping
docker run -v [主机路径]:[容器路径][:权限] image_name
inspect container
docker inspect container_name
container logs
docker logs container_name
Docker image
Dockerfile
build
docker build . -t image_name:image_tag
layered architecture
Environment Variables
docker run -e XXXXX=xxx image_name
command & entrypoint
- command:
CMD 如果用 json 格式给出命令,第一个参数必须是可执行的,后面的参数是第一个参数的 argument
- entrypoint
这时候的
docker run
就会变成:docker run ubuntu-sleeper 12
- command & entrypoint
docker run ubuntu-sleeper
docker run ubuntu-sleeper 5
docker run --entrypoint
这时候的
docker run
就会变成