玩转Docker之Docker环境搭建
1. Windows环境Docker 安装
(1) 下载Docker For Windows安装包并安装
安装完成后, 会默认要求启用windows系统的Hyper-V
如果系统没有安装其他的虚拟机软件(VirtualBox, VMware等),则可以跳过以下步骤直接使用
(2) 如果系统已经安装其他虚拟机软件,为了保持兼容, 我们需要停用Docker For Windows默认的开机自启动(防止开机就有报错弹窗)
此时我们就需要用到 docker-machine 这个命令行工具了
我们可以通过该工具创建一个基于virtualbox的docker 虚拟机
按下Win + X, 打开命令提示符(管理员), 然后输入powershell, 执行以下命令创建一个docker虚拟机
PS C:\WINDOWS\system32> docker-machine create --engine-registry-mirror=https://pu6c13lr.mirror.aliyuncs.com -d virtualbox default
其中的–engine-registry参数用于替换默认的registry源,示例中用的是阿里云的加速镜像源 -d 为driver参数, 表示虚拟机的驱动, 这里使用的是virtualbox 最后一个default参数表示虚拟机名字
注意: 执行以上命令的前提是系统已安装了virtual box虚拟机
创建完虚拟机之后我们需要启动该docker虚拟机(可以通过status查询是否已经启动)
PS C:\WINDOWS\system32> docker-machine status default
Running
PS C:\WINDOWS\system32> docker-machine start default
启动完docker 虚拟机, 我们还需要导入一下虚拟机的环境变量
先查看一下docker虚拟机环境变量
PS C:\WINDOWS\system32> docker-machine env default
$Env:DOCKER_TLS_VERIFY = "1"
$Env:DOCKER_HOST = "tcp://192.168.99.100:2376"
$Env:DOCKER_CERT_PATH = "C:\Users\admin one\.docker\machine\machines\default"
$Env:DOCKER_MACHINE_NAME = "default"
$Env:COMPOSE_CONVERT_WINDOWS_PATHS = "true"
# Run this command to configure your shell:
# & "C:\Program Files\Docker\Docker\Resources\bin\docker-machine.exe" env default | Invoke-Expression
然后按照输出的内容提示(最后两行注释)导入环境变量:
PS C:\WINDOWS\system32> docker-machine.exe env default | Invoke-Expression
(3) 开始使用docker
- 获取DockerHub上的镜像(docker pull)
PS C:\WINDOWS\system32> docker pull ubuntu:16.04
命令格式: docker pull <image>[:<version>]
<image>: 镜像名
<version>: 镜像版本, 不写时默认为latest
- 通过指定镜像运行一个docker容器(docker run)
PS C:\WINDOWS\system32> docker run -it --name ubuntu -v $PWD/logs:/logs -p 3306:3306 -d ubuntu:16.04
命令格式:
docker run [options] image
-it 是 --iteractive 和--tty的缩写
--name 容器名称
-v 是 --volume缩写,用于挂载目录或者文件到容器 :左侧是本地目录(文件), 右侧是容器中的目录(文件)
-d 是 --detach缩写,表示直接后台运行,不进入容器, 不加该参数会默认进去该容器的命令行
- 查询容器状态(docker ps 或者docker container ls)
PS C:\WINDOWS\system32> docker ps -a
命令格式:
docker ps / docker container ls [options]
-a 表示--all, 显示所有容器, 包括正在运行的和未运行的, 默认只有正在运行的
- 查看本地镜像(docker images或者docker image ls)
PS C:\WINDOWS\system32> docker images
- 将容器提交至镜像(docker commit)
PS C:\WINDOWS\system32> docker commit ubuntu your/ubuntu
命令格式:
docker commit <container> <image>[:<version>]
<container> 容器标志, 可以是ID, 也可以是名称
<image> 要提交的新的镜像名称
<version> 镜像版本,默认为latest
- 登陆私有镜像仓库(docker login)
PS C:\WINDOWS\system32> sudo docker login --username=oyoung registry.cn-hangzhou.aliyuncs.com
Enter Password:
命令格式:
docker login --username=<username> <registry url>
<username> 私有仓库的用户名
<registry url> 私有仓库的URL
- 为镜像打Tag(docker tag)
PS C:\WINDOWS\system32> docker tag 8bce7379ce2e registry.cn-hangzhou.aliyuncs.com/oyoungs/ubuntu:16.04
命令格式:
docker tag <imageId> <tagname>
<imageId> 要打Tag的镜像Id
<tagname> Tag 名称
- 推送镜像到私有仓库(docker push)
PS C:\WINDOWS\system32> docker push registry.cn-hangzhou.aliyuncs.com/oyoungs/ubuntu:16.04
命令格式:
docker push <tagname>
<tagname> 上一个步骤打Tag使用的Tag名称
进入容器中查看容器IP, 为容器添加系统路由,这样可以通过网络与容器交互
PS C:\WINDOWS\system32> docker exec -it ubuntu /bin/bash
root@af55bfc0c603:/# ifconfig
ifconfig命令ubuntu的默认镜像是没有的, 需要使用apt-get 安装
root@af55bfc0c603:/# apt-get update
root@af55bfc0c603:/# apt-get install net-tools
添加系统路由(假设容器Ip为: 172.17.0.2)
PS C:\WINDOWS\system32> route ADD 172.17.0.0/16 MASK 255.255.0.0 192.168.99.100
macOS 添加系统路由
~$ sudo route -n add -net 172.17.0.0/16 -netmask 255.255.0.0 192.168.99.100