本文在windows10下使用docker for windows为例说明docker的用法
docker其实就是一个变相的虚拟机(容器)。他可以虚拟出一个Linux环境。
轻量级:基于 LXC 的轻量级的容器,而且 docker 能够只加载每个 container 变化的部分相比 KVM 之类最明显的特点就是启动快,资源占用小.
易于构建:使用Dockerfile 即使在复杂的环境也能几行命令搞定
节约成本:以前一个虚拟机至少需要几个 G 的磁盘空间,docker 容器可以减少到 MB 级;
除此之外还有其他很多优点,这需要你自己在实际应用中体会了
Docker提供Linux(CentOS,Ubuntu,Fedora,Debian…),MacOS,Windows下使用,对于windows,win10以下的系统使用Docker Toolbox,win10下使用DOCKER CE FOR WINDOWS,本文使用的即是win10环境.
下载完后双击安装,就像普通软件那样安装即可,前提是开启Hype-V
安装完成后,dockerm默认会从dockerhub仓库中存取相关镜像,但是官方网站太慢,我们使用国内的阿里巴巴提供的dockerhub镜像地址
进入后的控制台如下:
复制你的加速器地址,编辑器打开文件”C:\Users\username.docker\daemon.json”,将加速器地址粘贴到”{“registry-mirrors”:[“xxxx”],”insecure-registries”:[], “debug”:true, “experimental”: true}”中的xxxx处.
打开cmd键入
docker version
此为查看docker的版本号,显示,表示安装docker成功
使用docker的搜索功能在线仓库中搜索一个镜像,比如我们搜索”centos”
docker search centos
回车,会显示:
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 3742 [OK]
ansible/centos7-ansible Ansible on Centos7 102 [OK]
jdeathe/centos-ssh CentOS-6 6.9 x86_64 / CentOS-7 7.4.1708 x8... 88 [OK]
tutum/centos Simple CentOS docker image with SSH access 33
imagine10255/centos6-lnmp-php56 centos6-lnmp-php56 31 [OK]
...
name字段为镜像的名字,好了我们就安装官方的那个centos:
docker pull centos
等待安装完成.
docker run -it centos bash
run命令后-it表示前台运行,运行后其实在容器中运行的,会自动产生一个容器,bash表示要在镜像中执行的命令,即使用bash命令行.
centos在容器中运行起来了,但这个centos太纯净了,纯净到连一些基本的组件都没有,比如ssh,下面我们来安装一些组件:
yum install passwd openssl openssh-server -y
安装了passwd openssl openssh-server这三个,
生成公钥和密钥:
ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''
ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''
ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key -N ''
用vim编辑器(需要自己安装或用vi)编辑/etc/ssh/sshd_config文件:
UsePAM yes 改为 UsePAM no
UsePrivilegeSeparation sandbox 前面的注释标识去掉并把sandbox改为no,退出保存
centos这个镜像登录后用户默认为root,那么为root用户设置密码:
passwd root
设置密码后.我们还需要安装一个工具net-tools:
yum install net-tools -y
然后用ip工具查看一下本地网络启用没有:
ip addr ls eth0
退出镜像的bash
Ctrl+P+Q
然后将我们操作过的镜像保存为一个新的镜像:
先看看一下容器信息:
docker ps -a
然后保存镜像
docker commit 容器id 用户名/镜像名:标签名
停止运行docker容器
docker stop 容器ID
运行容器并把容器中的22端口映射到宿主机的2222:
docker run -d -p 2222:22 用户名/镜像名:标签名 /usr/sbin/sshd -D
-d表示后台运行,-p表示要绑定的端口,并启动ssh服务器
如果有多个端口需要映射,解决方法之一就是:
docker run -it -p 2222:22 -p 8888:88 镜像名 bash
进入容器环境之后再启动对应的监听端口额程序
删除容器:
docker rm 容器ID [-f]
删除镜像:
docker rmi 镜像ID [-f]
docker之所以更为简洁高效,dockerfile便是缘由之一,dockerfile 用来创建一个自定义的 image, 包含了用户指定的软件依赖等。当前目录下包含 Dockerfile, 使用命令 build 来创建新的 image.
构建:进入含有dockerfile目录中
docker build -t "为新生成的镜像指定一个名字" "dockerfile名字" .