安装
基本概念
- 镜像: 一个操作系统
- 容器: 一个操作系统的实例
- 仓库: 存储镜像的地方
镜像使用
查找镜像
docker search
获取镜像
docker pull ubuntu:18.04
列出本地镜像
docker image ls
本地占用空间
docker system df
删除镜像
docker image rm [镜像名|镜像Id]
docker image rm ubuntu
操作容器
启动
- 运行之后终止
docker run ubuntu:18.04 /bin/echo 'Hello world'
- 进入终端
docker run -t -i ubuntu:18.04 /bin/bash
- 后台运行
docker run -d ubuntu:18.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
docker run -dit ubuntu
- 后台运行的容器
docker container ls
- 重新进入
docker exec -it [container id] bash
- 终止后的容器
docker container ls -a
- 启动终止后的容器
docker container start [container id]
- 终止容器
docker container stop [container id]
- 后台运行的容器
退出
在容器终端 exit
导出
docker container ls -a
docker export [container id] > ubuntu.tar
导入
$ cat ubuntu.tar | docker import - test/ubuntu:1.0
$ docker image ls
删除
-
docker container prune
删除全部终止的容器 -
docker container rm [container id]
删除终止后的容器 -
docker container rm -f [contaienr id]
删除正在运行的容器
构建镜像
- 编写Dockerfile 2. 运行命令
$ mkdir docker;cd docer; touch t/1.txt;vi Dockerfile
// Dockerfile
#以本地 ubuntu 为基础
FROM ubuntu
#定义变量
ENV VERSION 7.2
#复制本地文件到镜像里
COPY t/* /root/
#在镜像里运行shell命令
RUN mkdir /root/test \
&& mkdir /root/test2
&& touch "$VERSION"
$ docker build -t test:1.0 .
$ docker image ls
访问容器服务
将本机5000端口映射到容器5000
$ docker run -d -p 5000:5000 training/webapp python app.py
案例
构建node服务器
// 开发环境 ubuntu
// ubuntu:18.04 不存在会自动下载
$ docker run -it ubuntu:18.04 /bin/bash
// 进入了ubuntu:18.04 终端
$ apt-get update
$ apt-get install curl; apt-get install vim
// node 安装 https://github.com/nodejs/help/wiki/Installation#how-to-install-nodejs-via-binary-archive-on-linux
$ cd /root; mkdir server; cd server; npm init -y; npm i koa; vi sever.js;
// server.js---------
const Koa = require('koa')
const app = new Koa()
app.use(async (ctx, next) => {
ctx.set('Access-Control-Allow-Origin','*')
await next();
});
app.use(async (ctx)=>{
ctx.response.body = "<h1>hello</h1>"
})
app.listen(3000);
console.log('app started at port 3000...');
// ----
$ exit
$ docker run -d -p 3000:3000 ubuntu:18.04 /bin/sh -c ". ~/.profile; node /root/server/server.js"
$ docker container logs [container id]
// 返回<h1>hello</h1> 成功了
$ curl 127.0.0.1:3000
$ docker export [container id] > node.tar
// 迁移到其他服务器时直接导入
$ cat node.tar | docker import - node:1.0
$ docker image ls
// 启动
$ docker run -d -p 3000:3000 node:1.0 /bin/sh -c ". ~/.profile; node /root/server/server.js"