Docker启动、重启、关闭命令
启动:systemctl start docker
守护进程重启:sudo systemctl daemon-reload
重启docker服务:sudo service docker restart
关闭docker:service docker stop
关闭docker:systemctl stop docker
Docker与虚拟机比较
1、docker容器很快,启动和停止可以在秒级别实现。
2、docker容器对系统资源需求很少,一台主机上可以同时运行数千个docker容器。
3、docker通过类似git的操作来方便用户获取、分发和更新应用镜像,指令简明,学习成本较低。
4、docker通过dockerfile配置文件来支持灵活的自动化创建和部署机制,提高工作效率。
Docker核心概念
1、镜像:类似于虚拟机镜像,可以理解为面向docker引擎的只读模板,包含文件系统。
2、容器:
docker容器类似于一个轻量级的沙箱,利用容器可以实现运行和隔离应用。
容器是从镜像创建的应用运行实例,可以将其启动、开始、停止、删除,而这些容器都是互相隔离、互不可见的。
读者可以把容器看做一个简易版的Linux系统环境(这包括root用户权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序打包而成的应用盒子。
镜像自身是只读的。容器从镜像启动的时候,docker会在镜像的最上层创建一个可写层,镜像本身将保持不变。
3、仓库:
类似于代码仓库,是集中存放镜像文件的场所。其管理理念和git十分相似。
Docker镜像操作
获取镜像:
docker pull ubuntu:14.04
利用镜像创建一个容器,在其中运行bash应用:
docker run -t -i ubuntu /bin/bash
查看镜像信息:
docker images
获取镜像详细信息:
docker inspect 5506de2b643b
搜寻镜像:
docker search mysql
删除容器:
docker rmi mysql:latest
创建镜像:基于已有镜像的容器创建、基于本地模板导入、基于dockerfile创建。
基于已有镜像的容器创建:
docker run -ti ubuntu:14.04 /bin/bash
sudo docker commit -m "Added a new file" -a "Docker Newbee" a925cb40b3f0 test
基于本地模板文件导入镜像:
cat ubuntu-14.04-x86_64-minimal.tar.gz |docker import - ubuntu:14.04
存储镜像:
sudo docker save -o ubuntu_14.0.tar ubuntu:14.04
载入镜像:
sudo docker load --input ubuntu_14.04.tar
上传镜像:
sudo docker tag test:latest user/test:latest
sudo docker push user/test:latest
Docker容器操作
新建容器:
sudo docker create -it ubuntu:latest
新建并启动一个容器:
sudo docker run -it ubuntu:14.04 /bin/bash
利用docker run来创建并启动容器时,docker在后台运行的标准操作包括:
检查本地是否存在指定的镜像,不存在就从共有仓库下载。
利用镜像创建并启动一个容器。
分配一个文件系统,并在只读的镜像层外挂载一层可读写层。
从宿主主机配置的网桥接口中桥姐一个虚拟接口到容器中去。
从地址池配置一个IP地址给容器。
执行用户指定的应用程序。
执行完毕之后容器被终止。
启动bash终端,允许用户进行交互:
sudo docker run -t -i ubuntu:14.04 /bin/bash
进入容器:
docker exec -it ubuntu:14.04 /bin/bash
删除容器:
docker rm bb21ac673673
Docker仓库
区别docker注册服务器、docker仓库(共有仓库、私有仓库),docker官方维护的公共仓库:https://hub.docker.com, 其中包括15000多个镜像。
登录:
docker login
Docker网络配置
端口映射访问容器:
docker run -d -p 5000:5000 -p 3000:80 training/webapp python app.py
容器互联实现容器之间的通信:
docker run -d --name db training/postgres
docker run -d -p --name web --link db:db training/webapp python app.py
使用Dockerfile创建镜像
dockerfile组成:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。
#第一行必须制定基于的基础镜像
FROM ubuntu
#维护者信息
MAINTAINER docker_user docker_user@email.com
#镜像的操作指令
RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.list
RUN apt-get update && apt-get install -y nginx
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
#容器启动时执行指令
CMD /usr/sbin/nginx
创建镜像:(docker build -t 生成镜像标签 dockerfile所在路径)
docker build -t build_repo/first_image /tmp/docker_builder/
docker安装使用操作系统
Busybox、Debian/Ubuntu、CentOS/Fedora、CoreOS
Busybox:一个集成了一百多个最常用Linux命令和工具的软件工具箱,它在单一的可执行文件中提供了精简的Unix工具。
docker search busybox
docker pull busybox
启动busybox:
docker run -it busybox
启动Ubuntu并进入容器:
docker run -ti ubuntu:14.04 /bin/bash
Docker 核心技术
docker底层依赖的核心技术主要包括Linux操作系统的命名空间、控制组、联合文件系统和Linux虚拟网络支持。
每个容器都可以拥有自己单独的命令空间,运行在其中的应用都像在独立的操作系统中运行一样。命名空间保证了容器之间彼此互不影响。
Docker安全
docker安全很大程度上依赖于Linux系统本身,评估安全性时,主要考虑以下几个方面:
1.Linux内核的命名空间机制提供的容器隔离安全;
2.Linux控制组对容器资源的控制能力安全;
3.docker程序本身的抗攻击性;
4.其他安全增强机制(包括AppArmor、SELinux等)对容器安全性的影响。
Docker高级网路网络配置
docker启动时会在主机上自动创建一个docker0虚拟网桥,实际上是一个Linux网桥,它会在挂载在其上的接口之间进行转发。同时,docker随机分配一个本地未占用的私有网段中的一个地址给docker0接口,此后启动的容器内的网口也会自动分配一个同一网段的地址。当创建一个docker容器的时候。同时会创建一对veth pair接口。
docker网络管理工具:pipework、playground。