Posted on:
Last modified:
Docker 是一个进程的容器,不是虚拟机。它为一个进程隔离了文件系统、网络和环境变量。 最好在其中运行一个且仅运行一个线程,而不是运行多个任务。
每次执行 docker run
, 都会根据镜像来创建一个全新的 container, 可以使用 docker start
或者 docker attach
来连接上已经创建的 container。image 和 container 的关系大概类似于
程序和进程之间的关系。
docker run OPTIONS IMAGE COMMAND
运行一个镜像,并产生一个容器-d
选项作为 daemon 运行--restart=always
总是自动重启这个容器-p
set ports [host:container]-it
以交互模式运行--name=NAME
设定名字--rm
clean the container after running--net
sets the network connected to-w
sets working dir-e
设定环境变量-u
sets user-v
sets volume host_file:container_file:optionsdocker exec OPTIONS CONTAINER COMMAND
在容器内运行命令docker exec -it [container] /bin/bash
可以进到容器内部的 shelldocker start CONTAINER_ID
重启停止的容器docker ps -a
显示所有的 containerdocker pull
拉取镜像docker images
列出当前机器上的所有镜像docker build -t TAG
根据 dockerfile 构建镜像,镜像名字: user/image:tagdocker 有两个网络模式:
使用 docker run --net="bridge"
,这种模式会使用虚拟网卡 docker0
做了一层 NAT 转发,
所以效率比较低,优点是不用改变应用分配固定端口的代码,docker 会在宿主机上随机分配一个端口,
避免冲突。
使用 docker run --net="host"
,宿主机和 docker 内部使用的都是同一个网络,如 eth0
docker network ls ls the network interfaces
docker network inspect inspect the network for details
docker network create/rm create network interface
docker network connect/disconnect [net] [container] connect a container to a network
Docker 会在容器内的 /etc/hosts
自动设置好 container 名字的映射,所以在容器之间可以用
名字直接访问。
Docker 容器一般来说是无状态的,除了保存到数据库之外,还可以使用卷来把容器中的状态保存出来。 Docker 中最好运行的是无状态的服务,这样方便于横向扩展。
docker volume create --name hello
docker run -d -v hello:/container/path/for/volume container_image my_command
在 Docker 中,一般情况下应该把日志直接打到 stdout,这样方便日志收集程序收集。可以使用
docker logs [contianer]
查看打到 stdout 的日志。
© 2016-2022 Yifei Kong. Powered by ynotes
All contents are under the CC-BY-NC-SA license, if not otherwise specified.
Opinions expressed here are solely my own and do not express the views or opinions of my employer.
友情链接: MySQL 教程站