LeoMason
  • VIP视频
  • 微博
  • 脸书
  • 推特
  • 关于

docker入门

docker入门

本文在windows10下使用docker for windows为例说明docker的用法

docker是什么?

docker其实就是一个变相的虚拟机(容器)。他可以虚拟出一个Linux环境。

为什么要用docker?

轻量级:基于 LXC 的轻量级的容器,而且 docker 能够只加载每个 container 变化的部分相比 KVM 之类最明显的特点就是启动快,资源占用小.
易于构建:使用Dockerfile 即使在复杂的环境也能几行命令搞定
节约成本:以前一个虚拟机至少需要几个 G 的磁盘空间,docker 容器可以减少到 MB 级;
除此之外还有其他很多优点,这需要你自己在实际应用中体会了

Docker基础入门

安装

下载

Docker提供Linux(CentOS,Ubuntu,Fedora,Debian…),MacOS,Windows下使用,对于windows,win10以下的系统使用Docker Toolbox,win10下使用DOCKER CE FOR WINDOWS,本文使用的即是win10环境.

安装docker

下载完后双击安装,就像普通软件那样安装即可,前提是开启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]

dockerfile

docker之所以更为简洁高效,dockerfile便是缘由之一,dockerfile 用来创建一个自定义的 image, 包含了用户指定的软件依赖等。当前目录下包含 Dockerfile, 使用命令 build 来创建新的 image.

构建:进入含有dockerfile目录中


docker build -t "为新生成的镜像指定一个名字" "dockerfile名字" .