Docker 可以用来打包应用、依赖以及环境到一个可移植的容器中,然后发布到任何流行的 Linux 机器上。
docker 两个关键的部分为容器和镜像,这两者的关系可以理解为 OOP 中类和对象的关系,容器作为对象,镜像作为类。Docker 镜像是用于创建 Docker 容器的模板,容器可以独立运行一个或一组应用。
参考 这里
常用命令
从镜像仓库(类似于代码仓库)拉取已有镜像:
docker pull training/webapp
当运行容器(创建镜像实例)时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。
不确定镜像是否存在时可使用 docker search imageName
进行搜索。
运行示例 web 应用:
docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py
浏览器访问 http://localhost:5000/ 可见输出 :“Hello world” 字样。
- -d: 让容器在后台运行
- -p: 将容器内部使用的网络端口映射到我们使用的主机上
- -P: 容器内部端口随机映射到主机的高端口。
-
training/webapp
为镜像名 -
python app.py
为容器启动后执行的命令
docker run -d training/webapp cat app.py
创建容器然后执行 cat app.py
命令,控制台就会输出如下内容:
import os
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
provider = str(os.environ.get('PROVIDER', 'world'))
return 'Hello '+provider+'!'
if __name__ == '__main__':
# Bind to PORT if defined, otherwise default to 5000.
port = int(os.environ.get('PORT', 5000))
app.run(host='0.0.0.0', port=port)
列出镜像列表:
docker images
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
frolvlad/alpine-oraclejdk8 slim b56494ff6c5c 2 months ago 162MB
training/webapp latest 6fae60ef3446 3 years ago 349MB
查看正在运行的容器:
docker ps
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5efd960f44ee training/webapp "python app.py" 10 minutes ago Up 10 minutes 0.0.0.0:5000->5000/tcp loving_jackson
docker port 5efd960f44ee
可快捷查看指定 id 容器的端口映射情况
$ docker port 5efd960f44ee
5000/tcp -> 0.0.0.0:5000
查看 WEB 应用程序日志
docker logs 5efd960f44ee
$ docker logs 5efd960f44ee
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
172.17.0.1 - - [14/Nov/2018 07:14:03] "GET / HTTP/1.1" 200 -
172.17.0.1 - - [14/Nov/2018 07:14:03] "GET /favicon.ico HTTP/1.1" 404 -
查看容器中的进程
docker top 5efd960f44ee
$ docker top 5efd960f44ee
PID USER TIME COMMAND
10269 root 0:00 python app.py
查看容器信息
返回容器当前信息的 json 格式数据
$ docker inspect 5efd960f44ee
停止/重启 容器
docker stop 5efd960f44ee
docker start 5efd960f44ee
删除容器
docker rm 5efd960f44ee3
移除前需要先将容器停止。
构建镜像
构建镜像需要借助 DockerFile 文件:
FROM frolvlad/alpine-oraclejdk8:slim
COPY test.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
创建后 DockerFile 后就可以创建镜像了:
docker build -t test-service:0.0.1 .
- -t :指定要创建的目标镜像名
- . :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径