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次的意思