Docker是一个容器,安装在宿主机(比如一个安装好的centos7虚拟机)上,一个宿主机可以装多个docker,每个docker的环境互不干扰。

Docker镜像相当于linux虚拟机的一个镜像,但linux虚拟机镜像安装好了只是一个linux环境,没有任何已安装好的 应用或者软件包;而docker的镜像可以包含有安装好的 应用或者软件包。

比如:用一个含有centos+nginx+mysql+phpdocker镜像新建一个docker,那么新建好的docker就是一个 centos+nginx+mysql+php 的环境,这个docker新建好,进入docker就可以用这个lnmp环境,就不再动手安装lnmp了,挺棒的!

 

思路:

    1. yum 安装docker

    2. 启动docker服务

    3. 下载docker镜像

    4. 安装docker镜像

    5. 进入,退出docker

    6. 重点讲解

 

. yum 安装docker

执行命令 yum install y docker-io

 

.启动docker服务

        systemctl  start docker.service (启动docker服务)

        systemctl  enable docker.service (设置为开机启动)

        systemctl  start docker.service (停止docker服务)

 

. 获取docker镜像


方法一下载:

官网下载:

docker pull centos:latest (官网下载centos镜像,最新版)

        docker pull ubuntu (官网下载ubuntu docker镜像 所有版本)


其他网站下载

                   #阿里云

docker pull registry.cn-hangzhou.aliyuncs.com/acs-sample/redis-sameersbn

#时速云

docker pull index.tenxcloud.com/tenxcloud/ubuntu

#网易蜂巢

docker pull hub.c.163.com/xbingo/jdk8:latest


方法二复制:

          #先看看有没有想要的镜像

docker p_w_picpaths

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE

centos              latest              9baab0af79c4        6 weeks ago         196.8 MB

#导出到tar文件

docker save 9baab0af79c4 > /home/mycentos-save-1204.tar

#拷贝到目的机器文件夹

 

#进入目的机器文件夹

          cd /opt

#docker镜像导入目标机器

docker load <centos-dockerp_w_picpaths.tar

#看看镜像导成功没有

docker p_w_picpaths

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE

centos              latest              9baab0af79c4        6 weeks ago         196.8 MB

 

附:删除docker镜像方法: docker rmi 镜像id (镜像id 可用docker p_w_picpaths 查看)

 

. 安装docker镜像

    a. 简单安装一个docker

docker run --rm -ti centos:latest /bin/bash 

这条命令如果没有centos:latest 镜像,会在官网自动下载完后再安装) 意思是通过镜像centos:latest创建了一个未命名的容器,run就是运行并创建容器,--rm是当容器退出就直接删除容器的意思,-ti的意思是创建了容器之后立刻进入交互模式,/bin/bash则是指定在容器内执行什么操作,一般来说,视乎镜像包含了什么软件和环境,你的容器就有什么软件和环境.

 

b. 完整命令安装一个docker

docker run -ti -e "TZ=Asia/Shanghai" --name testweb1 --restart=on-failure:3 -c 250 -m 1g --memory-swap=-1 -p 8001:80 -p 22222:22 -v /data/webdata:/data/htdocs/www centos/test:webdemo1  /bin/bash

 

意思就是创建一个容器,用镜像centos/test:webdemo1来做模板,设置时区是Asia/Shanghai,名字叫testweb1,分配了250cpu1G内存,把母机8001端口映射到容器的80端口,22222端口映射给22端口,把目录/data/webdata挂载到/data/htdocs/www,在容器内运行初始化脚本/bin/bash,这样你想要的容器就搭建完成了,你用web访问母机IP8001端口就能访问了,ssh登录就用22222端口.

 

附:删除已创建docker 方法:

docker rm 容器名(或者容器ID)删除没有运行的容器:

docker rm f 容器名(或者容器ID)删除运行的容器:

 

docker rm -f `docker ps -a -q`  删除所有容器

         docker rm `docker ps -a -q`  删除非运行的容器 

         docker rm `docker ps -a | grep Exited | awk'{print $1}'`  删除异常退出的容器

 

. 进入,退出docker

a 查看已经安装docker :命令docker ps a

wKioL1nMvcqi2ntXAAB1UymA74w436.png-wh_50

 

b. 进入名为yzt_newips_core docker docker exec ti yzt_newips_core bash

 

c. 退出docker:命令 exit

 





. 重点讲解

 

先来看看常用命令和参数解析:

docker p_w_picpaths    查看本地已经存在的镜像,-a 列出所有(默认不包括中间镜像);

docker rmi IMAGE    删除指定的镜像,-f 强制删除;

docker ps    查看运行中的 Docker 容器,-a 列出所有(默认不包括未运行的容器);

docker rm CONTAINER    删除指定的容器,-f 强制删除;

docker attach containerID:    进入指定ID的容器内,不过要慎用,有隐患,建议用docker exec -it  containerID/containerNAME bash来替代

docker inspect containerID:    查看指定ID的容器配置

docker commit containerID 镜像名:    将指定ID的容器制作成镜像,方便以后复用,可以重新提交来更新镜像

-d :    后台运行容器,并返回容器ID

-i :    以交互模式运行容器,通常与 -t 同时使用;

-t :    为容器重新分配一个伪输入终端,通常与 -i 同时使用;

-c:    分配cpu资源,并不是按核数区分,可以分配1-1024任何一个数字,默认是1024,只是一个对比值,比如AB两个容器,A配置的是1024B配置的是512,那么A最大可以使用的CPU资源是B的两倍,如果A容器一直闲着,那B容器还是可以使用空闲资源的。

-m:    分配内存,支持k/m/g/t/p单位,例如分配1G内存:-m 1g

--memory-swap:    分配多少(非负数值)swap资源,-1即完全不分配

-p:    映射母机端口到容器端口,例如:将母机的8001端口映射给容器的80端口:-p 8001:80,将母机内网44444端口映射到容器的22端口:192.168.1.10:44444:22,甚至可以把tcp协议换成udp(我是不太建议):192.168.0.225:300:3000/udp

-v:    把母机的文件夹挂载到容器内的文件夹,例如将母机的/data/soft挂载到容器内的/soft文件夹:-v /data/soft:/soft

--name="nginx-lb" :    为容器指定一个名称(和计算机名不是一回事)

--dns 8.8.8.8 :    指定容器使用的DNS服务器,默认和宿主一致;

--dns-search example.com :    指定容器DNS搜索域名,默认和宿主一致;

-h "mars":     指定容器的hostname(和容器名不是一回事)

-e username="ritchie" :    设置环境变量;

--env-file=[]:     从指定文件读入环境变量;

--net="bridge" :    指定容器的网络连接类型,支持 bridge /host / none

--restart=on-failure:3 :    容器意外停止后的操作方式,这里是尝试重启3次的意思