CentOS 7上安装配置Docker

  • CentOS 7上安装配置Docker已关闭评论
  • 115,015 views
  • A+
所属分类:docker

Docker 是一个开源工具,它可以让创建和管理 Linux 容器变得简单。容器就像是轻量级的虚拟机,并且可以以毫秒级的速度来启动或停止。Docker 帮助系统管理员和程序员在容器中开发应用程序,并且可以扩展到成千上万的节点。

CentOS 7上安装配置Docker

这是一只鲸鱼,它托着许多集装箱。我们可以把宿主机可当做这只鲸鱼,把相互隔离的容器可看成集装箱,每个集装箱中都包含自己的应用程序。

Docker与传统虚拟区别

传统虚拟化技术的体系架构:

CentOS 7上安装配置Docker

Docker技术的体系架构:

CentOS 7上安装配置Docker

容器和 VM(虚拟机)的主要区别是:

  • 容器提供了基于进程的隔离,而虚拟机提供了资源的完全隔离。
  • 虚拟机可能需要一分钟来启动,而容器只需要一秒钟或更短。
  • 容器使用宿主操作系统的内核,而虚拟机使用独立的内核。

Doker 平台的基本构成

CentOS 7上安装配置Docker

Docker 平台基本上由三部分组成:

  • 客户端:用户使用 Docker 提供的工具(CLI 以及 API 等)来构建,上传镜像并发布命令来创建和启动容器
  • Docker 主机:从 Docker registry 上下载镜像并启动容器
  • Docker registry:Docker 镜像仓库,用于保存镜像,并提供镜像上传和下载
  • 后面的文章会具体分析。

Docker 容器的状态机

CentOS 7上安装配置Docker

一个容器在某个时刻可能处于以下几种状态之一:

  • created:已经被创建 (使用 docker ps -a 命令可以列出)但是还没有被启动 (使用 docker ps 命令还无法列出)
  • running:运行中
  • paused:容器的进程被暂停了
  • restarting:容器的进程正在重启过程中
  • exited:上图中的 stopped 状态,表示容器之前运行过但是现在处于停止状态(要区别于 created 状态,它是指一个新创出的尚未运行过的容器)。可以通过 start 命令使其重新进入 running 状态
  • destroyed:容器被删除了,再也不存在了

Docker 的安装

RedHat/CentOS必须要6.6版本以上,或者7.x才能安装docker,建议在RedHat/CentOS 7上使用docker,因为RedHat/CentOS 7的内核升级到了kernel 3.10,对lxc容器支持更好。

查看Linux内核版本(内核版本必须是3.10或者以上):

  1. cat /proc/version
  2. uname -a
  3. lsb_release -a
  4. ##无法执行命令安装
  5. yum install -y redhat-lsb

更新YUM源:

  1. yum update

安装:

  1. yum install docker -y

检查版本:

  1. docker -v

安装完成后,使用下面的命令来启动 docker 服务,并将其设置为开机启动:

  1. service docker start
  2. chkconfig docker on

下载官方的 CentOS 镜像:

  1. docker pull centos

检查CentOS 镜像是否被获取:

  1. docker images
  2. # 删除镜像
  3. docker rmi <image id>
  4. # 删除镜像(针对多个相同image id的镜像)
  5. docker rmi repository:tag

下载完成后,你应该会看到:

  1. [root@iZ2ze74fkxrls31tr2ia2fZ ~]# docker images centos
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. docker.io/centos latest 3fa822599e10 3weeks ago 203.5 MB

如果看到以上输出,说明你可以使用“docker.io/centos”这个镜像了,或将其称为仓库(Repository),该镜像有一个名为“latest”的标签(Tag),此外还有一个名为“3fa822599e10 ”的镜像 ID(可能您所看到的镜像 ID 与此处的不一致,那是正常现象,因为这个数字是随机生成的)。此外,我们可以看到该镜像只有 203.5 MB,非常小巧,而不像虚拟机的镜像文件那样庞大。

重命名TAG:

  1. # ocker tag IMAGEID(镜像id) REPOSITORY:TAG(仓库:标签)
  2. docker tag 3fa822599e10 docker.io/centos:centos

启动容器:

  1. docker run -i -t -v /root/software/:/mnt/software/ 3fa822599e10 /bin/bash

命令参数说明:
docker run <相关参数> <镜像 ID> <初始命令>

  • -i:表示以“交互模式”运行容器
  • -t:表示容器启动后会进入其命令行
  • -v:表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>

更多参数详解:

  1. Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  2. -d, --detach=false 指定容器运行于前台还是后台,默认为false
  3. -i, --interactive=false 打开STDIN,用于控制台交互
  4. -t, --tty=false 分配tty设备,该可以支持终端登录,默认为false
  5. -u, --user="" 指定容器的用户
  6. -a, --attach=[] 登录容器(必须是以docker run -d启动的容器)
  7. -w, --workdir="" 指定容器的工作目录
  8. -c, --cpu-shares=0 设置容器CPU权重,在CPU共享场景使用
  9. -e, --env=[] 指定环境变量,容器中可以使用该环境变量
  10. -m, --memory="" 指定容器的内存上限
  11. -P, --publish-all=false 指定容器暴露的端口
  12. -p, --publish=[] 指定容器暴露的端口
  13. -h, --hostname="" 指定容器的主机名
  14. -v, --volume=[] 给容器挂载存储卷,挂载到容器的某个目录
  15. --volumes-from=[] 给容器挂载其他容器上的卷,挂载到容器的某个目录
  16. --cap-add=[] 添加权限,权限清单详见:http://linux.die.net/man/7/capabilities
  17. --cap-drop=[] 删除权限,权限清单详见:http://linux.die.net/man/7/capabilities
  18. --cidfile="" 运行容器后,在指定文件中写入容器PID值,一种典型的监控系统用法
  19. --cpuset="" 设置容器可以使用哪些CPU,此参数可以用来容器独占CPU
  20. --device=[] 添加主机设备给容器,相当于设备直通
  21. --dns=[] 指定容器的dns服务器
  22. --dns-search=[] 指定容器的dns搜索域名,写入到容器的/etc/resolv.conf文件
  23. --entrypoint="" 覆盖image的入口点
  24. --env-file=[] 指定环境变量文件,文件格式为每行一个环境变量
  25. --expose=[] 指定容器暴露的端口,即修改镜像的暴露端口
  26. --link=[] 指定容器间的关联,使用其他容器的IP、env等信息
  27. --lxc-conf=[] 指定容器的配置文件,只有在指定--exec-driver=lxc时使用
  28. --name="" 指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字
  29. --net="bridge" 容器网络设置:
  30. bridge 使用docker daemon指定的网桥
  31. host //容器使用主机的网络
  32. container:NAME_or_ID >//使用其他容器的网路,共享IP和PORT等网络资源
  33. none 容器使用自己的网络(类似--net=bridge),但是不进行配置
  34. --privileged=false 指定容器是否为特权容器,特权容器拥有所有的capabilities
  35. --restart="no" 指定容器停止后的重启策略:
  36. no:容器退出时不重启
  37. on-failure:容器故障退出(返回值非零)时重启
  38. always:容器退出时总是重启
  39. --rm=false 指定容器停止后自动删除容器(不支持以docker run -d启动的容器)
  40. --sig-proxy=true 设置由代理接受并处理信号,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理

Docker命令

我们可以把Docker 的命令大概地分类如下:

  1. 镜像操作:
  2. build Build an image from a Dockerfile
  3. commit Create a new image from a container's changes
  4. images List images
  5. load Load an image from a tar archive or STDIN
  6. pull Pull an image or a repository from a registry
  7. push Push an image or a repository to a registry
  8. rmi Remove one or more images
  9. search Search the Docker Hub for images
  10. tag Tag an image into a repository
  11. save Save one or more images to a tar archive
  12. history 显示某镜像的历史
  13. inspect 获取镜像的详细信息
  14. 容器及其中应用的生命周期操作:
  15. create 创建一个容器
  16. kill Kill one or more running containers
  17. inspect Return low-level information on a container, image or task
  18. pause Pause all processes within one or more containers
  19. ps List containers
  20. rm 删除一个或者多个容器
  21. rename Rename a container
  22. restart Restart a container
  23. run 创建并启动一个容器
  24. start 启动一个处于停止状态的容器
  25. stats 显示容器实时的资源消耗信息
  26. stop 停止一个处于运行状态的容器
  27. top Display the running processes of a container
  28. unpause Unpause all processes within one or more containers
  29. update Update configuration of one or more containers
  30. wait Block until a container stops, then print its exit code
  31. attach Attach to a running container
  32. exec Run a command in a running container
  33. port List port mappings or a specific mapping for the container
  34. logs 获取容器的日志
  35. 容器文件系统操作:
  36. cp Copy files/folders between a container and the local filesystem
  37. diff Inspect changes on a container's filesystem
  38. export Export a container's filesystem as a tar archive
  39. import Import the contents from a tarball to create a filesystem image
  40. Docker registry 操作:
  41. login Log in to a Docker registry.
  42. logout Log out from a Docker registry.
  43. Volume 操作
  44. volume Manage Docker volumes
  45. 网络操作
  46. network Manage Docker networks
  47. Swarm 相关操作
  48. swarm Manage Docker Swarm
  49. service Manage Docker services
  50. node Manage Docker Swarm nodes
  51. 系统操作:
  52. version Show the Docker version information
  53. events 持续返回docker 事件
  54. info 显示Docker 主机系统范围内的信息
  1. # 查看运行中的容器
  2. docker ps
  3. # 查看所有容器
  4. docker ps -a
  5. # 退出容器
  6. 按Ctrl+D 即可退出当前容器【但退出后会停止容器】
  7. # 退出不停止容器:
  8. 组合键:Ctrl+P+Q
  9. # 启动容器
  10. docker start 容器名或ID
  11. # 进入容器
  12. docker attach 容器名或ID
  13. # 停止容器
  14. docker stop 容器名或ID
  15. # 暂停容器
  16. docker pause 容器名或ID
  17. #继续容器
  18. docker unpause 容器名或ID
  19. # 删除容器
  20. docker rm 容器名或ID
  21. # 删除全部容器--慎用
  22. docker stop $(docker ps -q) & docker rm $(docker ps -aq)
  23. #保存容器,生成镜像
  24. docker commit 容器ID 镜像名称
  25. #从 host 拷贝文件到 container 里面
  26. docker cp /home/soft centos:/webapp

docker run与start的区别

docker run 只在第一次运行时使用,将镜像放到容器中,以后再次启动这个容器时,只需要使用命令docker start 即可。

docker run相当于执行了两步操作:将镜像放入容器中(docker create),然后将容器启动,使之变成运行时容器(docker start)。

CentOS 7上安装配置Docker

而docker start的作用是,重新启动已存在的镜像。也就是说,如果使用这个命令,我们必须事先知道这个容器的ID,或者这个容器的名字,我们可以使用docker ps找到这个容器的信息。

CentOS 7上安装配置Docker

因为容器的ID是随机码,而容器的名字又是看似无意义的命名,我们可以使用命令:

  1. docker rename jovial_cori centos

给这个容器命名。这样以后,我们再次启动或停止容器时,就可以直接使用这个名字:

  1. docker [stop] [start] new_name

而要显示出所有容器,包括没有启动的,可以使用命令:

  1. docker ps -a

Docker配置

更改存储目录:

  1. #复制docker存储目录
  2. rsync -aXS /var/lib/docker/. /home/docker
  3. #更改 docker 存储文件目录
  4. ln -s /home/docker /var/lib/docker

获取IP:

  1. docker inspect <container id>

要获取所有容器名称及其IP地址只需一个命令:

  1. docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps -aq)
  2. docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

Docker 镜像加速器

注册个帐号

https://dev.aliyun.com/search.html

阿里云会自动为用户分配一个镜像加速器的地址,登录后进入”管理中心”—>”加速器”,里面有分配给你的镜像加速器的地址以及各个环境的使用说明。

镜像加速器地址:https://xxxxx.mirror.aliyuncs.com

如何配置镜像加速器

针对Docker客户端版本大于1.10.0的用户
您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器:

  1. {
  2. "registry-mirrors": ["<your accelerate address>"]
  3. }

重启Docker Daemon:

  1. sudo systemctl daemon-reload
  2. sudo systemctl restart docker
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 微信公众号
  • 微信公众号扫一扫
  • weinxin
avatar