运行第一个容器
该过程可以简述为:
- 1.从Docker hub中下载httpd镜像,镜像中已经安装好了apache http server
- 2.启动httpd容器,并将容器的80端口映射到host的80端口
- 3.配置完后,从浏览器访问http://{ip}/就可以访问http服务了
[parallels@localhost ~]$ sudo docker run -d -p 80:80 httpd
[sudo] password for parallels:
Unable to find image ‘httpd:latest’ locally
latest: Pulling from library/httpd
afb6ec6fdc1c: Pull complete
5a6b409207a3: Pull complete
41e5e22239e2: Pull complete
9829f70a6a6b: Pull complete
3cd774fea202: Pull complete
Digest: sha256:db9c3bca36edb5d961d70f83b13e65e552641e00a7eb80bf435cbe9912afcb1f
Status: Downloaded newer image for httpd:latest
33468c3560403e96821f547eafdd14c9e4c63639b6a8bb6489f9bd3603c810f0
容器核心知识概述
什么是容器
容器是一种轻量级、可移植、自包含的软件打包技术,容器由两部分组成:
- 1.应用程序本身;
- 2.依赖:比如应用程序需要的库或者其他软件在host操作系统的用户控件中运行,与操作系统的其他进程隔离。
容器是如何工作的
Docker架构
Docker采用的是client/server架构,客户端向服务器端发送请求,服务器负责构建、运行和分发容器。客户端和服务器端可以运行在同一个host上,客户端也可以通过socket或rest api与远程的服务器通信。
- Docker客户端
- docker命令
- Docker服务器
- Docker daemon是服务器组件,以linux后台服务的方式运行在docker host上,负责创建、运行、监控容器,构建、存储镜像。
- 默认配置下,Docker daemon只能响应来自本地host的客户端请求,如果需要允许远程客户端请求,需要在配置文件中打开TCP监听。
- Docker镜像 (构建和打包阶段)
- 镜像有多种生成方法:
- 从无到有开始创建镜像;
- 下载并使用别人创建好的现成镜像
- 在现有镜像上创建新的镜像
- 镜像有多种生成方法:
- Docker容器 (启动和运行阶段)
- 就是Docker镜像的运行实例
- Registry
- 存放Docker镜像的仓库,分为私有和公有两种。
- Docker hub是默认的registory,由docker公司维护;
- 用户也可以创建私有的registry
镜像管理命令
docker image 查看已经下载到本地的镜像
docker ps / docker container ls 显示正在运行的容器
docker build -t ubuntu-with-vi-dockerfile . 创建镜像
docker history ubuntu 显示镜像的构建历史
docker tag ubuntu-with-vi-dockerfile test/ubuntu-with-vi:v1 重命名镜像,打标签
docker push 上传镜像
docker rmi 删除镜像 eg:docker rmi demo:latest
docker rm 删除容器
docker save -o demo.tar demo:latest 导出镜像到本地
docker load -i demo.tar 从导出的本地文件中导入本地镜像
#容器管理命令
docker create xx
docker run xx 运行容器
docker ps 查看容器
docker start ** 启动容器
docker stop
docker rm xx 删除容器
docker inspect xx 查看容器信息
docker attach xx 依附容器
dokcer exec $options $containerid $args 容器内执行命令
docker logs $containerid 查看容器日志
docker events $options 容器事件监控
docker export -o $export.tar $containerid 导出容器
docker import $export.tar $imagename:tag 导入容器
docker run -v /root/datavolume:/data -it demo:latest /bin/sh 挂载一个主机目录或文件作为数据卷
镜像Dockerfile
FROM 指定构建镜像的基础镜像
MAINTAINER:指定创建镜像的用户
WORKDIR:为后续的run,cmd,entrypoint等指令指定工作目录
RUN:在当前镜像基础上执行指定的命令
ADD/COPY:复制本地主机文件、目录,添加到容器指定路径中
EXPOSE:知名容器对外开放的端口
CMD:设置启动容器时的默认运行命令,只能使用一次
ENTRYPOINT:和CMD类似,用来指定容器启动默认与运行命令,只能使用一次
分发镜像
一个特定的镜像的名字由两部分组成:repository和tag
** 搭建本地registry
- 1.启动registry容器
- docker run -d -p 5000:5000 -v /myregistry:/var/lib/registry registry:2
- 2.重命名镜像(在前面加上了运行registry的主机名称和端口)repository的完整格式为 host:port/username/xxx
- docker tag test/ubuntu-with-vi:v1 registry.example.net:5000/test/ubuntu:v1
- 3上传镜像
- docker push 127.0.0.1:5000/test/ubuntu:v1
两种进入容器的方法
- docker attach
- 可通过ctrl p然后ctrl q退出attach终端
- 区别:attach直接进入容器启动命令的终端,不会启动新的进程。
- docker exec
- docker exec -it xxx bash|sh
- 执行exit退出容器
- 区别:exec则是在容器中打开新的终端,并且可以启动新的进程。
第5章 docker网络
docker网络从覆盖范围上可分单个host上的容器网络和跨多个host的网络。
docker安装时会自动在host上创建三个网络:可以用docker network ls命令查看,none host bridge
- none网络
容器创建时,可以使用–network=none,执定使用none网络;这样就是什么都没有的网络,挂在这个网络下的容器除了lo,没有任何网卡。
适用于对安全性较高并且不需要联网的应用,比如某容器的唯一用途是生成随机密码。 - host网络
容器创建时,使用–network=host指定使用host网络,直接使用host的网络最大的好处是性能,如果容器对网络传输效率较高要求,可以使用host网络。 - bridge网络
docker安装时会创建一个命令为docker0的linux bridge,如果不指定–network,创建的容器默认都会挂载到docker0上。 - user-defined网络
除了none,host,bridge这三个自动创建的网络,用户用额可以根据业务需求创建user-defined网络。
重要的命令
- brctl show 查看当前host的网络变化
- docker network inspect bridge 查看网络的配置信息
- docker network connect 为容器添加网卡
第六张 Docker 存储
容器进阶知识
第七章 多主机管理
多主机环境手工方式效率低且不容易保证一致性,针对这个问题,docker给出的解决方案:Docker machine。