Docker是一种操作系统层面的虚拟化技术,应用进程直接运行于宿主的内核,没有自己的内核,而且也没有进行硬件虚拟。
优点
- 没有硬件虚拟以及运行完整操作系统等额外开销,更高效的利用系统资源
- 直接运行于宿主内核,无需启动完整操作系统,秒级、毫秒级的启动时间
- 一致的运行环境
- 更轻松的迁移
- 更轻松的维护和扩展
基本概念
- 镜像: 特殊的文件系统,是容器创建时的模板,相当于面向对象中的类
- 容器: 镜像运行时的实体,相当于面向对象中的对象,可以创建、启动、停止、删除、暂停等
- 仓库: 包含不同软件、不同版本的仓库
安装 docker-ce(CE:社区版 EE:企业版)
CentOS
1.卸载旧版本
sudo yum remove docker docker-common docker-selinux docker-engine
2.安装依赖包
sudo yum install-y yum-utils device-mapper-persistent-data lvm2
3.添加yum国内源
sudo yum-config-manager--add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4.更新yum软件源缓存
sudo yum makecache fast
5.安装 docker-ce
sudo apt-getinstall docker-ce
6.启动 docker
sudo systemctl enable docker sudo systemctl start docker
镜像
获取镜像
docker pull[选项][DockerRegistry地址]<仓库名>:<标签>
- 选项: 可通过 docker pull --help 了解option
- Docker Registry 地址: 默认 Docker Hub
- 仓库名: <用户名>/<软件名>,对于 Docker Hub ,默认 library,也就是官方镜像
- 标签: 软件版本
更新镜像
1.在原镜像的容器内,进行更改或更新
2.提交docker commit -m='进行了XXX的更新' -a='更新人' e218edb10161 ubuntu:v2
3.通过 docker images,查看新镜像
创建镜像
1.编写 Dockerfile 文件
runoob@runoob:~$ cat Dockerfile
FROM centos:6.7
MAINTAINER Fisher "fisher@sudops.com"
RUN /bin/echo 'root:123456' |chpasswd
RUN useradd runoob
RUN /bin/echo 'runoob:123456' |chpasswd
RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE 22
EXPOSE 80
CMD /usr/sbin/sshd -D
2.构建镜像
docker build-t ubuntu:v3.
- -t:指定要创建的目标镜像名
- . :指定Dockerfile文件目录
3.通过 docker images,查看新镜像
运行容器
docker run 只在不存在某个镜像的容器时使用,其他情况启动容器,docker start即可
运行容器,并执行 command
docker run ubuntu:15.10/bin/echo"Hello world"
运行交互式容器
docker run-i-t ubuntu:15.10/bin/bash
- -i: 终端
- -t: 交互式操作
进程方式运行容器(后台模式)
- 后台运行容器,并返回容器id
docker run-d ubuntu:14.04/bin/echo"hello lee"
- 查找运行的容器
docker ps
- 查看容器的标准输出
docker logs33fa4c2fc457
- 停止容器
docker stop33fa4c2fc457
命令汇总
1.查看本地主机的镜像
docker images
2.从 Docker Hub 查找镜像
docker search httpd
3.设置镜像标签
docker tag 860c279d2fec ubuntu:dev
4.删除镜像(必须先把镜像的所有容器删除)
docker rmi imageID
5.启动容器
docker start 7a38a1ad55c6
docker start determined_swanson
6.停止容器
docker stop 7a38a1ad55c6
docker stop determined_swanson
7.重启容器
docker restart 7a38a1ad55c6
docker restart determined_swanson
8.查看所有容器
docker ps -a
9.查看所有容器(只查找正在运行的容器)
docker ps
10.查询最后一次创建的容器
docker ps -l
11.删除容器(容器必须是停止状态)
docker rm determined_swanson
12.进入一个已经运行的容器
docker exec -it 860c279d2fec bash
13.查看容器配置信息和状态信息
docker inspect 7a38a1ad55c6
docker inspect determined_swanson
14.查看容器内运行的进程
docker top 7a38a1ad55c6
docker top determined_swanson
15.将容器内部的网络端口映射到宿主机
随机映射到主机端口 docker run -P training/webapp python app.py
映射到指定的主机端口 docker run -p 5000:5000 training/webapp python app.py
16.查看容器端口的映射情况
docker port 7a38a1ad55c6
docker port determined_swanson