一、基本概念
1. 什么是Docker
...
2. Docker的基本概念
- 镜像(Image)
是一个只读模板,用来运行Docker容器。
- 容器(Container)
负责应用程序的运行,包括操作系统、用户添加的文件以及元数据
容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
注:镜像是只读的,容器在启动的时候创建一层可写层作为最上层。
- 仓库(Repository)
仓库是集中存放镜像文件的场所。
仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
注:Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务
二、快速开始
1. 安装
# ubuntu
curl -fsSL https://get.docker.com/ | sh
sudo service docker restart
2. 镜像
获取
# 从仓库注册服务器拉取
sudo docker pull ubuntu:14.04 # 官方仓库注册服务器,相当于 sudo docker pull registry.hub.docker.com/ubuntu:14.04
# 也可使用其他仓库,如: sudo docker pull dl.dockerpool.com:5000/ubuntu:12.04
显示
sudo docker images
运行
sudo docker run -t -i ubuntu:14.04 /bin/bash
修改
# 运行容器bash,通过shell进行操作
sudo docker run -t -i ubuntu:14.04 /bin/bash
# 提交更新
sudo docker commit -m "Added json gem" -a "Docker Newbee" 0b2616b0e5a8 ouruser/sinatra:v2
-
-m
: 提交信息 -
-a
: 指定更新的用户信息 -
0b2616b0e5a8
: 容器的 ID -
ouruser/sinatra
: 仓库名 -
v2
: 仓库tag
创建
-
通过修改已有
image
, 具体操作修改
中已有 -
通过
Dockerfile
来创建
mkdir mydockerimg
# docker image的配置文件
vim Dockerfile
# 创建image
sudo docker build -t testimg .
-
-t
: 指定新的image的名字 -
.
: Dockerfile所在目录
Dockerfile
示例
# 这是注释
FROM ubuntu:14.04
MAINTAINER AIR_CC <c989692c@gmail.com>
RUN apt-get -y update
CMD echo "hello-world"
ADD myApp /var/www
EXPOSE 80
-
#
: 注释 -
FROM
: 告诉 Docker 使用哪个镜像作为基础 -
MAINTAINER
: 维护者的信息 -
RUN
: 在创建镜像时运行的操作 -
CMD
: 启动容器后运行的程序 -
ADD
: 复制本地文件到镜像 -
WORKDIR
: 设置 dockerfile 命令运行目录 -
EXPOSE
: 对外部开放端口
- 通过本地文件系统导入
sudo cat ubuntu-14.04-x86_64-minimal.tar.gz | docker import - ubuntu:14.04
注:具体镜像可在openva中找
保存与载入
1.保存已有的镜像
sudo docker save -o ubuntu_14.04.tar ubuntu:14.04
- 载入镜像
sudo docker load --input ubuntu_14.04.tar
# 或者 sudo docker load < ubuntu_14.04.tar
删除
# 暂停并删除相应的容器
sudo docker stop containerName
sudo docker rm containerName
# 删除镜像
sudo docker rmi imageName
注:删除镜像之前需要先stop & rm
相应的container
# 删除所有的container
sudo docker stop $(docker ps -a -q)
sudo docker rm $(docker ps -a -q)
# 删除所有的image
sudo docker rmi $(docker images -q)
2. 容器
容器是独立运行的一个或一组应用,以及它们的运行态环境。对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上面的应用。
运行
# 运行一下,就终止
sudo docker run -tid ubuntu:14.04
run
的参数说明
-
-t
: 为container分配一个伪终端(pseudo-tty),并绑定到容器的标准输入上 -
-i
: 让容器的标准输入保持打开 -
-d
: 使容器在后台以守护态(Daemonized)形式运行
终止
使用sudo docker stop <container ID>
终止;
注:当容器中指定的应用终结时,容器也会终止
sudo docker start <container ID>
-- 启动一个处于终止的容器
sudo docker restart <container ID>
-- 重启一个处于运行态的容器
运行日志
获取 container 中程序输出到 terminal 上的信息 docker logs <container>
进入
- 使用attach
sudo docker run -tid ubuntu:14.04
sudo docker attach <container namespace>
# ctrl + c: 杀死该 contanier
# ctrl + p + ctrl + q: 退出container交互界面
- 使用nsenter
导出与导入
- 导出
sudo docker export <container ID> > outputFileName
- 导入
sudo docker import <filePath/fileURL>
注:用户既可以使用 docker load 来导入镜像存储文件到本地镜像库,也可以使用 docker import来导入一个容器快照到本地镜像库。这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。
删除
sudo docker stop <container ID>
sudo docker rm <container ID>
- 注: 删除容器前需先
stop
*
其他
获取container的PID
sudo docker inspect --format '{{.State.Pid}}' <container ID>
参考:
网友评论