前言
一款产品从开发到上线,从操作系统,到运行环境,再到应用配置。作为开发+运维之间的协助我们需要关心的问题很多,这也是很多软件公司不得不面对的问题,特别是各种版本的迭代之后,不同版本环境的兼容,对运维人员都是考验。
Docker之所以发展如此迅速,针对运维它给出了一个标准化的解决方案。所以,现在Docker成为了开发和运维必备的技能之一,极大便利的帮助解决了应用的环境和版本迭代问题。
本系列文章让你轻松进入docker的世界!
一、Docker定义
docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
二、Docker优点
1、更快速的交付和部署
传统:一堆帮助文档、安装程序;
Docker:打包镜像,测试发布,一键运行;
2、更便捷的升级和扩缩容
传统:安装环境、配置参数、应用打包部署,重新来一遍;
Docker:我们部署应用就和积木一样!项目打包为一个镜像,扩展 服务器B,直接在服务器B上运行 镜像即可,无须搭建环境,打包部署,完成扩容!
3、更简单的系统运维
传统:开发、测试、UAT、生产各个环境存在一致性差异,经常会导致意想不到的问题,这些都是无意义的问题;
Docker:各个开发环境高度一致化,避免环境带来的问题干扰;
4、更高效的计算资源利用
传统:存在部分应用,部署后,导致不能部署第二个相同应用;
Docker:是内核级别的虚拟化,可以在一个物理机上运行很多的容器示例,服务器被压榨到极致;
三、Docker组成
Docker是一个client-server结构的系统,docker-server启动完毕后,会启动一个守护进程,通过socket来接收docker-client的命令,从而在server上执行命令所要执行的操作。
-
镜像(Image)
Docker镜像就好比一个模板,可以通过这个模板来创建容器服务,tomcat镜像===> run ===> tomcat01容器(提供服务),通过这个镜像可以创建多个容器(最终服务或项目运行就是在容器内);
-
容器(Container)
Docker利用容器技术,独立运行一个或者一个组的应用,通过镜像来创建的;
目前就可以把容器理解为一个简易的linux系统 + 应用 + 环境;
-
仓库(Repository)
仓库就是存放镜像的地方,库分为共有仓库和私有仓库;
Docker Hub(默认是国外的),阿里云...等都有容器服务器(配置镜像加速);
三、Docker安装
服务器常用CentOS,这里以CentOS 7系统上安装Docker为示例。
建议服务器在安装后,切换yum源,采用国内163或者阿里的yum源,安装应用会快很多。
1、检查系统内核
最新docker安装要求centos的内核版本在3.10以上
[root@localhost ~]# uname -r
3.10.0-1160.6.1.el7.x86_64
2、使用yum安装docker
- yum更新(可略过,内核版本不够时需要)
yum -y update
- docker安装
yum -y install docker
- docker启动
systemctl start docker.service
可能报错:Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.
解决方法:执行 vi /etc/sysconfig/selinux , 把 selinux 属性值改为disabled。然后重启系统,docker就可以启动啦
- 开机自启动
systemctl enable docker.service
- 配置docker镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
镜像加速的地址请设置成阿里的地址("https://xxx.mirror.aliyuncs.com"是随手写的地址),请自己登录阿里云获取自己分配的加速地址,这样docker下载应用会快很多。
阿里云镜像加速地址获取:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
最后使用 docker info查看配置是否生效;(信息最后又显示镜像地址的属性,看是否已经修改为自己的阿里云镜像加速地址);
docker info
四、Docker使用
docker的使用基本都是docker提供的命令为主。
Usage: docker [OPTIONS] COMMAND [arg...] docker daemon [ --help | ... ] docker [ --help | -v | --version ] A self-sufficient runtime for containers. Options: --config=~/.docker Location of client config files #客户端配置文件的位置 -D, --debug=false Enable debug mode #启用Debug调试模式 -H, --host=[] Daemon socket(s) to connect to #守护进程的套接字(Socket)连接 -h, --help=false Print usage #打印使用 -l, --log-level=info Set the logging level #设置日志级别 --tls=false Use TLS; implied by--tlsverify # --tlscacert=~/.docker/ca.pem Trust certs signed only by this CA #信任证书签名CA --tlscert=~/.docker/cert.pem Path to TLS certificate file #TLS证书文件路径 --tlskey=~/.docker/key.pem Path to TLS key file #TLS密钥文件路径 --tlsverify=false Use TLS and verify the remote #使用TLS验证远程 -v, --version=false Print version information and quit #打印版本信息并退出 Commands: attach Attach to a running container #当前shell下attach连接指定运行镜像 build Build an image from a Dockerfile #通过Dockerfile定制镜像 commit Create a new image from a container's changes #提交当前容器为新的镜像 cp Copy files/folders from a container to a HOSTDIR or to STDOUT #从容器中拷贝指定文件或者目录到宿主机中 create Create a new container #创建一个新的容器,同run 但不启动容器 diff Inspect changes on a container's filesystem #查看docker容器变化 events Get real time events from the server#从docker服务获取容器实时事件 exec Run a command in a running container#在已存在的容器上运行命令 export Export a container's filesystem as a tar archive #导出容器的内容流作为一个tar归档文件(对应import) history Show the history of an image #展示一个镜像形成历史 images List images #列出系统当前镜像 import Import the contents from a tarball to create a filesystem image #从tar包中的内容创建一个新的文件系统映像(对应export) info Display system-wide information #显示系统相关信息 inspect Return low-level information on a container or image #查看容器详细信息 kill Kill a running container #kill指定docker容器 load Load an image from a tar archive or STDIN #从一个tar包中加载一个镜像(对应save) login Register or log in to a Docker registry#注册或者登录一个docker源服务器 logout Log out from a Docker registry #从当前Docker registry退出 logs Fetch the logs of a container #输出当前容器日志信息 pause Pause all processes within a container#暂停容器 port List port mappings or a specific mapping for the CONTAINER #查看映射端口对应的容器内部源端口 ps List containers #列出容器列表 pull Pull an image or a repository from a registry #从docker镜像源服务器拉取指定镜像或者库镜像 push Push an image or a repository to a registry #推送指定镜像或者库镜像至docker源服务器 rename Rename a container #重命名容器 restart Restart a running container #重启运行的容器 rm Remove one or more containers #移除一个或者多个容器 rmi Remove one or more images #移除一个或多个镜像(无容器使用该镜像才可以删除,否则需要删除相关容器才可以继续或者-f强制删除) run Run a command in a new container #创建一个新的容器并运行一个命令 save Save an image(s) to a tar archive#保存一个镜像为一个tar包(对应load) search Search the Docker Hub for images #在dockerhub中搜索镜像 start Start one or more stopped containers#启动容器 stats Display a live stream of container(s) resource usage statistics #统计容器使用资源 stop Stop a running container #停止容器 tag Tag an image into a repository #给源中镜像打标签 top Display the running processes of a container #查看容器中运行的进程信息 unpause Unpause all processes within a container #取消暂停容器 version Show the Docker version information #查看容器版本号 wait Block until a container stops, then print its exit code #截取容器停止时的退出状态值
下面是常用命令的分类和说明:
1、信息命令
命令 | 说明 |
---|---|
docker version | 查看docker版本信息 |
docker info | 查看docker系统信息(镜像,容器,扩卷,宿主机信息,镜像地址等) |
docker 命令 --help | docker命令的解析说明 |
docker status 容器id |
注意:docker的指令如果不会或者忘记了,都可以通过 docker help 命令来查看帮助文档。(十分重要)
使用示例:docker ps --help
[root@MiWiFi-R4-srv v2]# docker ps --help
Usage: docker ps [OPTIONS]
List containers
Options:
-a, --all Show all containers (default shows just running)
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print containers using a Go template
-n, --last int Show n last created containers (includes all states) (default -1)
-l, --latest Show the latest created container (includes all states)
--no-trunc Don't truncate output
-q, --quiet Only display container IDs
-s, --size Display total file sizes
2、镜像命令
说明 | |
---|---|
docker search 关键字 | 我们经常去docker hub上检索镜像的详细信息,如镜像的TAG |
docker pull 镜像名:tag | :tag是可选的,tag表示标签,多为软件的版本,默认是latest |
docker images | 查看本地所有镜像 |
docker rmi 镜像id | 删除指定的本地镜像 |
docker tag |
3、容器命令
命令 | 说明 |
---|---|
docker run args 镜像名称 | 根据镜像启动容器 |
docker ps | 查看运行中的容器 |
docker stop 容器id | 停止运行中的容器 |
docker ps ‐a | 查看所有的容器 |
docker start 容器id | 启动容器 |
docker rm 容器id | 删除一个容器 |
docker logs 容器id | 查看容器的日志(-f:不断显示) |
docker exec -it 容器id /bin/bash | 进入容器交互式界面 |
docker commit 容器id 镜像名称 | 提交容器为新的镜像 |
4、网络命令
命令 | 说明 |
---|---|
docker network ls | 查看所有的网络列表 |
docker network inspect 网络id | 查看具体的网络信息 |
docker network connect 容器id 网络 | 把容器加入到指定网络 |
docker network create ... | 创建docker网络 |
五、执行流程
执行图1:
执行图2: