Docker是一个容器,安装在宿主机(好比一个安装好的centos7虚拟机)上,一个宿主机能够装多个docker,每一个docker的环境互不干扰。php
Docker镜像至关于linux虚拟机的一个镜像,但linux虚拟机镜像安装好了只是一个linux环境,没有任何已安装好的 应用或者软件包;而docker的镜像能够包含有安装好的 应用或者软件包。mysql
好比:用一个含有centos+nginx+mysql+php的docker镜像新建一个docker,那么新建好的docker就是一个 centos+nginx+mysql+php 的环境,这个docker新建好,进入docker就能够用这个lnmp环境,就再也不动手安装lnmp了,挺棒的!linux
思路:nginx
1. yum 安装dockerweb
2. 启动docker服务redis
3. 下载docker镜像sql
4. 安装docker镜像docker
5. 进入,退出dockerubuntu
6. 重点讲解centos
一. 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,分配了250份cpu和1G内存,把母机8001端口映射到容器的80端口,把22222端口映射给22端口,把目录/data/webdata挂载到/data/htdocs/www,在容器内运行初始化脚本/bin/bash,这样你想要的容器就搭建完成了,你用web访问母机IP加8001端口就能访问了,想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
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,只是一个对比值,好比A和B两个容器,A配置的是1024,B配置的是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次的意思