docker安装笔记

2018-09-06 2034 0

安装教程

Docker使用了Linux内核的容器技术,很依赖Linux环境,在其他系统下必须使用虚拟机(如VirtualBox)启动一个Linux系统然后在此基础上使用Docker。目前Docker推出了MAC和Windows的客户端,代替了以往繁琐的安装过程。其本质上还是创建了一个Linux虚拟机然后在上面运行Docker Daemon。

MacOS

Docker官网 上下载 Docker for Mac客户端安装即可。注意下载Edge版,Stable版在容器内无法访问互联网。

CentOS 6.5

Docker官方的安装教程是基于CentOS7的,CentOS6.5的安装方式不太一样,需要安装docker-io。

1. 禁用selinux

  1. setenforce 0

2. 安装 Fedora EPEL

  1. yum -y install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

3. 检查内核版本

  1. # uname -r
  2. 2.6.32-431.el6.x86_64
  3. # cat /etc/redhat-release
  4. CentOS release 6.5 (Final)

官方说明是只能运行于64位架构平台,内核版本为2.6.32-431及以上(即>=CentOS 6.5)

另外也可以运行脚本check-config.sh来检查。

  1. curl -sSL https://raw.githubusercontent.com/dotcloud/docker/master/contrib/check-config.sh | sh

4. 安装 docker-io并启动

  1. yum install docker-io
  2. service start docker

注意事项

Docker for Mac使用通过Hypervisor.framework提供的轻量级xhyve虚拟化技术,可以模拟不同架构的处理器,这样开发者就能直接在Mac上使用arm版的Docker镜像的。而CentOS上由于没有使用虚拟化技术,所以只能运行X86架构的镜像,运行arm版的镜像时会报错

  1. Error response from daemon: Cannot start container 9c24c091933b5152e0f2f98427e9ade914d0b189656d8e3d7dd038490c5d32fe: [8] System error: exec format error

Docker 使用

使用docker首先需要了解几个简单的概念:

  1. 镜像Image
    Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

  2. 容器Container
    镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。当退出容器时,其改变不会保存到镜像,可以使用docker commit命令将当前的状态提交成一个新的镜像。

非root用户使用

docker需要使用root用户来运行,安装docker时会默认创建一个docker用户组,将用户加入到这个组即可以普通用户身份来运行docker命令。

  1. sudo usermod -aG docker zhangkai

常用命令

根据自己的理解,总的来说分为以下几种:

  1. 容器生命周期管理 docker [run|start|stop|restart|kill|rm|pause|unpause]
  2. 容器操作运维 docker [ps|inspect|top|attach|events|logs|wait|export|port]
  3. 容器rootfs命令 docker [commit|cp|diff]
  4. 镜像仓库 docker [login|pull|push|search]
  5. 本地镜像管理 docker [images|rmi|tag|build|history|save|import]
  6. 其他命令 docker [info|version]
  1. 列出机器上的镜像(images)

  2. 在docker index中搜索image(search)官网

  3. 从docker registry server 中下拉image或repository(pull)

  4. 从image启动一个container(run)
    4.1 使用image创建container并执行相应命令,然后停止
    docker run ubuntu echo "hello world"
    4.2 使用image创建container并进入交互模式, login shell是/bin/bash
    docker run -it ubuntu /bin/bash
    -i: 以交互模式运行容器,通常与 -t 同时使用;
    -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
    4.3 运行出一个container放到后台运行
    docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 2; done"
    -d: 后台运行容器,并返回容器ID;
    4.4 映射host到container的端口和目录
    -p 5001:5000 将容器内部端口5000映射到宿主机端口5001
    -v /data1:/data 将容器目录/data映射到宿主机目录/data1

  5. 将一个container固化为一个新的image(commit)
    docker commit <container> [repo:tag]

  6. 查看运行的容器(ps)
    docker ps -a
    -a: 列出所有容器(包含已停止的)
    -q: 只列出容器ID

  7. 启动/停止(start/stop)
    可以使用 docker stop 来终止一个运行中的容器。
    此外,当Docker容器中指定的应用终结时,容器也自动终止。 例如对于上一章节中只启动了一个终端的容器,用户通过 exit 命令或 Ctrl+d 来退出终端时,所创建的容器立刻终止。

  8. 使用-d参数在后台运行容器时,如果需要重新进入,可以使用attach命令。

  9. rm 删除容器(不能删除正在运行的容器),rmi删除镜像(删除容器后再删除镜像)。

Docker 和 VMware fushion的冲突问题

安装docker之后,发现VMware启动出现问题,打不开/dev/vmmon,解决方法:

  1. 使用VMware时,先卸载haxm模块,然后就可以正常启动。

    1. sudo kextunload /Library/Extensions/intelhaxm.kext
  2. 使用docker时,先卸载vmmon模块,然后加载haxm模块。

    1. sudo kextunload /Applications/VMware\ Fusion.app/Contents/Library/kexts/vmmon.kext
    2. sudo kextload /Library/Extensions/intelhaxm.kext

Docker实例:启动mysql

直接给命令:

  1. docker run --name mysql -p 3308:3306 -v /DATA/public/www/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
  2. mysql -h127.0.0.1 -uroot -P3308 -proot

参数解释:

  1. --name mysql: 设置容器名
  2. -p 3308:3306: 将容器内的3306端口映射到宿主机的3308端口,这样可以在不同端口上启动多个实例
  3. -v : 将容器内目录映射到宿主机目录,这样不会因为容器的关闭而导致文件都丢失
  4. -e : 通过环境变量设置mysql密码
  5. -d : 后台运行
  6. mysql:5.7 指定mysql版本,最新版8.0默认的认证方式是caching_sha2_password ,而在MySQL5.7版本则为mysql_native_password,如果本地的mysqlclient不支持会报错: Authentication plugin 'caching_sha2_password' cannot be loaded
  7. 启动时必须指定-h127.0.0.1,否则会认证不通过。