开源中文网

您的位置: 首页 > docker > 正文

阿里云CentOS 7上安装配置Docker

来源: 零壹技术栈  作者: 陌上轩客

前言

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



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

传送门

Docker与传统虚拟区别

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


Docker技术的体系架构:


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

容器提供了基于进程的隔离,而虚拟机提供了资源( CPU、内存和硬盘)的完全隔离。
虚拟机可能需要一分钟来启动,而容器只需要一秒钟或更短。
虚拟机占用的内存空间可达到几个 G,而容器可能只需要几百兆。
容器使用宿主操作系统的内核,而虚拟机使用独立的内核。
Docker平台的基本构成



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

客户端:用户使用 Docker提供的工具( CLI以及 API等)来构建,上传镜像并发布命令来创建和启动容器。
Docker主机:从 Dockerregistry上下载镜像并启动和托管容器。
Docker registry: Docker镜像仓库,用于保存镜像,并提供镜像上传和下载。
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/CentOS7上使用 docker,因为 RedHat/CentOS7的内核升级到了 kernel3.10,对 lxc容器支持更好。

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

cat /proc/version

uname -a

lsb_release -a

##无法执行命令安装
yum install -y redhat-lsb

更新 yum安装源:

yum install docker -y
检查 docker版本:

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

service docker start
chkconfig docker on
下载官方的 CentOS的 docker镜像:

docker pull centos
检查 CentOS镜像是否被成功拉取到本地宿主机:

# 查看本地镜像列表
docker images
# 删除镜像
docker rmi
# 删除镜像(针对多个相同image id的镜像)
docker rmi repository
:
tag
镜像下载完成后,你应该会看到:

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

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

重命名 TAG为 centos:

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

启动 CentOS的容器:

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=[]                  指定容器间的关联,使用其他容器的IPenv等信息

  27.  --lxc-conf=[]              指定容器的配置文件,只有在指定--exec-driver=lxc时使用

  28.  --name=""                  指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字

  29.  --net="bridge"             容器网络设置:

  30.                                bridge 使用docker daemon指定的网桥

  31.                                host     //容器使用主机的网络

  32.                                container:NAME_or_ID  >//使用其他容器的网路,共享IPPORT等网络资源

  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           设置由代理接受并处理信号,但是SIGCHLDSIGSTOPSIGKILL不能被代理



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. ## 容器及其中应用的生命周期操作:

  16.    create    创建一个容器

  17.    kill      Kill one or more running containers

  18.    inspect   Return low-level information on a container, image or task

  19.    pause     Pause all processes within one or more containers

  20.    ps        List containers

  21.    rm        删除一个或者多个容器

  22.    rename    Rename a container

  23.    restart   Restart a container

  24.    run       创建并启动一个容器

  25.    start     启动一个处于停止状态的容器

  26.    stats     显示容器实时的资源消耗信息

  27.    stop      停止一个处于运行状态的容器

  28.    top       Display the running processes of a container

  29.    unpause   Unpause all processes within one or more containers

  30.    update    Update configuration of one or more containers

  31.    wait      Block until a container stops, then print its exit code

  32.    attach    Attach to a running container

  33.    exec      Run a command in a running container

  34.    port      List port mappings or a specific mapping for the container

  35.    logs      获取容器的日志

  36.  

  37. ## 容器文件系统操作:

  38.    cp        Copy files/folders between a container and the local filesystem

  39.    diff      Inspect changes on a container's filesystem

  40.    export    Export a container's filesystem as a tar archive

  41.    import    Import the contents from a tarball to create a filesystem image

  42.    Docker registry 操作:

  43.    login     Log in to a Docker registry.

  44.    logout    Log out from a Docker registry.

  45.  

  46. ## Volume操作:

  47.    volume    Manage Docker volumes

  48.  

  49. ## 网络操作:

  50.    network   Manage Docker networks

  51.  

  52. ## Swarm 相关操作:

  53.    swarm     Manage Docker Swarm

  54.    service   Manage Docker services

  55.    node      Manage Docker Swarm nodes

  56.  

  57. ## 系统操作:

  58.    version   Show the Docker version information

  59.    events    持续返回docker 事件

  60.    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)。



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



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

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

docker [stop] [start]  new_name
而要显示出所有容器,包括没有启动的,可以使用命令:

docker ps -a

Docker的配置

更改存储目录:

  1. #复制docker存储目录

  2. rsync -aXS /var/lib/docker/. /home/docker

  3.  

  4. #更改 docker 存储文件目录

  5. ln -s  /home/docker  /var/lib/docker
     

查看启动容器的具体信息:

docker inspect <container_id>

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


  1. docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps -aq)

  2.  

  3. 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. }
     

重启 DockerDaemon:

sudo systemctl daemon -reload
sudo systemctl restart docker

Tags:阿里
相关文章列表:
关于开源中文网 - 联系我们 - 广告服务 - 网站地图 - 版权声明