docker安装笔记
安装教程
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
setenforce 0
2. 安装 Fedora EPEL
yum -y install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
3. 检查内核版本
# uname -r
2.6.32-431.el6.x86_64
# cat /etc/redhat-release
CentOS release 6.5 (Final)
官方说明是只能运行于64位架构平台,内核版本为2.6.32-431及以上(即>=CentOS 6.5)
另外也可以运行脚本check-config.sh来检查。
curl -sSL https://raw.githubusercontent.com/dotcloud/docker/master/contrib/check-config.sh | sh
4. 安装 docker-io并启动
yum install docker-io
service start docker
注意事项
Docker for Mac使用通过Hypervisor.framework提供的轻量级xhyve虚拟化技术,可以模拟不同架构的处理器,这样开发者就能直接在Mac上使用arm版的Docker镜像的。而CentOS上由于没有使用虚拟化技术,所以只能运行X86架构的镜像,运行arm版的镜像时会报错
Error response from daemon: Cannot start container 9c24c091933b5152e0f2f98427e9ade914d0b189656d8e3d7dd038490c5d32fe: [8] System error: exec format error
Docker 使用
使用docker首先需要了解几个简单的概念:
镜像Image
Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。容器Container
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。当退出容器时,其改变不会保存到镜像,可以使用docker commit命令将当前的状态提交成一个新的镜像。
非root用户使用
docker需要使用root用户来运行,安装docker时会默认创建一个docker用户组,将用户加入到这个组即可以普通用户身份来运行docker命令。
sudo usermod -aG docker zhangkai
常用命令
根据自己的理解,总的来说分为以下几种:
容器生命周期管理 — docker [run|start|stop|restart|kill|rm|pause|unpause]
容器操作运维 — docker [ps|inspect|top|attach|events|logs|wait|export|port]
容器rootfs命令 — docker [commit|cp|diff]
镜像仓库 — docker [login|pull|push|search]
本地镜像管理 — docker [images|rmi|tag|build|history|save|import]
其他命令 — docker [info|version]
列出机器上的镜像(images)
在docker index中搜索image(search)官网
从docker registry server 中下拉image或repository(pull)
从image启动一个container(run)
4.1 使用image创建container并执行相应命令,然后停止docker run ubuntu echo "hello world"
4.2 使用image创建container并进入交互模式, login shell是/bin/bashdocker 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将一个container固化为一个新的image(commit)
docker commit <container> [repo:tag]
查看运行的容器(ps)
docker ps -a
-a: 列出所有容器(包含已停止的)
-q: 只列出容器ID启动/停止(start/stop)
可以使用 docker stop 来终止一个运行中的容器。
此外,当Docker容器中指定的应用终结时,容器也自动终止。 例如对于上一章节中只启动了一个终端的容器,用户通过 exit 命令或 Ctrl+d 来退出终端时,所创建的容器立刻终止。使用-d参数在后台运行容器时,如果需要重新进入,可以使用attach命令。
rm 删除容器(不能删除正在运行的容器),rmi删除镜像(删除容器后再删除镜像)。
Docker 和 VMware fushion的冲突问题
安装docker之后,发现VMware启动出现问题,打不开/dev/vmmon,解决方法:
使用VMware时,先卸载haxm模块,然后就可以正常启动。
sudo kextunload /Library/Extensions/intelhaxm.kext
使用docker时,先卸载vmmon模块,然后加载haxm模块。
sudo kextunload /Applications/VMware\ Fusion.app/Contents/Library/kexts/vmmon.kext
sudo kextload /Library/Extensions/intelhaxm.kext
Docker实例:启动mysql
直接给命令:
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
mysql -h127.0.0.1 -uroot -P3308 -proot
参数解释:
--name mysql: 设置容器名
-p 3308:3306: 将容器内的3306端口映射到宿主机的3308端口,这样可以在不同端口上启动多个实例
-v : 将容器内目录映射到宿主机目录,这样不会因为容器的关闭而导致文件都丢失
-e : 通过环境变量设置mysql密码
-d : 后台运行
mysql:5.7 指定mysql版本,最新版8.0默认的认证方式是caching_sha2_password ,而在MySQL5.7版本则为mysql_native_password,如果本地的mysqlclient不支持会报错: Authentication plugin 'caching_sha2_password' cannot be loaded
启动时必须指定-h127.0.0.1,否则会认证不通过。