1
头图

网上“入门”“十分钟掌握”之类的文章,总觉得不够精当,还是自己总结一份吧:

获取镜像

一般来说,我们常用的基础环境,都可以从docker官方仓库获取到了,比如需要node,就直接:

docker pull node

还可以指定版本,比如:

docker pull node:8.0

或者:

docker pull node:latest  # 获取最新版本

从镜像创建容器(运行实例)

# 可以分三步:
# 1. 创建容器
docker create -it --name='node-for-test' node  # --name需要指定一个唯一名称,最后是镜像的名字
# 2. 启动容器
docker start node-for-test  # 容器名就是刚刚创建的名字
# 3. 进入容器(用当前终端接管容器的输入输出)
docker exec -it node-for-test bash   # 最后一个参数指定的是shell类型


# 也可以把三步整合为一步
docker run -it -d --name='node-for-test' node bash

进入容器后,所有的命令行指令都是在容器内执行,如果想退出来,运行’exit‘命令即可;回到宿主命令行以后,可以用下面的命令查看所有容器:

docker ps -a  # 加-a参数,可以看到已经停止的容器

保存实例

对实例的任何修改,比如修改配置文件,安装软件之类的,都不会自动保存,只要实例退出就消失了。要想保留实例当前状态,需要在宿主机上执行命令:

docker commit node-for-test image-node-for-test:v0.5   # 相当于在本地生成了一个新镜像,保留了实例的当前状态,以后即使实例销毁了,也可以从这个镜像重新运行,最后一个参数是镜像名称,冒号后面是版本号

保存以后,可以用下面命令查看一下:

docker image ls

应该至少有两个镜像了

REPOSITORY                                                        TAG               IMAGE ID       CREATED         SIZE
image-node-for-test                                               v0.5              4d8e496fd921   2 hours ago     991MB
node                                                              latest            2577ab2cda97   6 days ago      991MB

建立端口映射

要想从外部访问docker里的服务,需要把端口映射到宿主机,一般启动的时候就直接映射了:

docker run -it -d -p 8000:8000 --name=node-for-test image-node-for-test bash  # 这个-d参数可以让服务后台运行,要不终端连接断开,docker容器也就停了

想映射多个端口的话,-p参数是可以多次使用的,比如:

docker run -it -d -p 8000:8000 -p 5000:22 ...

注意冒号前面是宿主机端口,后面是容器的。当然如果22端口用于ssh的话,容器里还需要安装ssh服务

查看启动错误日志

如果 run 命令没跑起来,看镜像列表,只有一个exi退出代码,信息太少,可以用 logs + 容器id(或者名称)来查看日志:

docker logs node-for-test

设置环境变量

有些 image 启动时需要设置环境变量,比如 mysql 官方镜像,如果不设置,启动会报错:

You need to specify one of the following as an environment variable
- MYSQL_ROOT_PASSWORD
- MYSQL_ALLOW_EMPTY_PASSWORD
- MYSQL_RANDOM_ROOT_PASSWORD

这时需要给 run 命名加上 -e 参数,比如:

docker run -d -e MYSQL_ALLOW_EMPTY_PASSWORD=yes --name=mysql mysql:latest

停止和删除容器

# 停止容器服务
docker stop node-for-test  
# 删除容器
docker rm node-for-test

songofhawk
303 声望24 粉丝