一、 解決問題
解決因運行環(huán)境而導致系統(tǒng)不可用或者出現(xiàn) bug 等問題伞辛。解決方法就是:提供一個統(tǒng)一的配置環(huán)境蚤氏。
二竿滨、 虛擬機
虛擬機(virtual machine)就是帶環(huán)境安裝的一種解決方案。它可以在一種操作系統(tǒng)里面運行另一種操作系統(tǒng)捏境,是全虛擬化的于游。
缺點:
(1)資源占用多
虛擬機會獨占一部分內(nèi)存和硬盤空間。它運行的時候垫言,其他程序就不能使用這些資源了贰剥。哪怕虛擬機里面的應用程序,真正使用的內(nèi)存只有 1MB筷频,虛擬機依然需要幾百 MB 的內(nèi)存才能運行蚌成。
(2)冗余步驟多
虛擬機是完整的操作系統(tǒng),一些系統(tǒng)級別的操作步驟凛捏,往往無法跳過担忧,比如用戶登錄。
(3)啟動慢
啟動操作系統(tǒng)需要多久坯癣,啟動虛擬機就需要多久示罗≡浚可能要等幾分鐘脯倒,應用程序才能真正運行。
三、 Linux 容器
Linux 容器(Linux Containers梨水,縮寫為 LXC)不是模擬一個完整的操作系統(tǒng)旦委,而是對進程進行隔離。或者說匀钧,在正常進程的外面套了一個保護層遣铝。對于容器里面的進程來說填硕,它接觸到的各種資源都是虛擬的翅帜,從而實現(xiàn)與底層系統(tǒng)的隔離。
由于容器是進程級別的,相比虛擬機有很多優(yōu)勢。
(1)啟動快
容器里面的應用骤素,直接就是底層系統(tǒng)的一個進程霎槐,而不是虛擬機內(nèi)部的進程。所以,啟動容器相當于啟動本機的一個進程与殃,而不是啟動一個操作系統(tǒng)爽篷,速度就快很多。
(2)資源占用少
容器只占用需要的資源,不占用那些沒有用到的資源复凳;虛擬機由于是完整的操作系統(tǒng)髓棋,不可避免要占用所有資源。另外,多個容器可以共享資源柒凉,虛擬機都是獨享資源蔬咬。
(3)體積小
容器只要包含用到的組件即可北启,而虛擬機是整個操作系統(tǒng)的打包,所以容器文件比虛擬機文件要小很多宇植。
總之忙上,容器有點像輕量級的虛擬機绣溜,能夠提供虛擬化的環(huán)境,但是成本開銷小得多恬叹。
四明肮、 docker 是什么?
Docker 屬于 Linux 容器的一種封裝,提供簡單易用的容器使用接口。
Docker 將應用程序與該程序的依賴褥芒,打包在一個文件里面很澄。運行這個文件讯蒲,就會生成一個虛擬容器。程序在這個虛擬容器里運行雷则,就好像在真實的物理機上運行一樣。有了 Docker,就不用擔心環(huán)境問題。
總體來說褐缠,Docker 的接口相當簡單胡桨,用戶可以方便地創(chuàng)建和使用容器膛虫,把自己的應用放入容器剧劝。容器還可以進行版本管理、復制抓歼、分享讥此、修改,就像管理普通的代碼一樣谣妻。
五萄喳、docker 的用途
Docker 的主要用途,目前有三大類蹋半。
(1)提供一次性的環(huán)境他巨。比如,本地測試他人的軟件减江、持續(xù)集成的時候提供單元測試和構(gòu)建的環(huán)境染突。
(2)提供彈性的云服務。因為 Docker 容器可以隨開隨關您市,很適合動態(tài)擴容和縮容觉痛。
(3)組建微服務架構(gòu)役衡。通過多個容器茵休,一臺機器可以跑多個服務,因此在本機就可以模擬出微服務架構(gòu)手蝎。
六榕莺、 image 文件
Docker 把應用程序及其依賴,打包在 image 文件里面棵介。這個 image 文件钉鸯,就是一個鏡像,可以通過它去創(chuàng)建若干容器對象邮辽。類似于 Java 中類與對象的關系唠雕。
# 列出本機的所有 image 文件。
$ docker image ls
# 刪除 image 文件
$ docker image rm [imageName]
# 下載鏡像
$ docker pull [imageName]
七吨述、 容器文件
image 文件生成的容器實例岩睁,本身也是一個文件,稱為容器文件揣云。也就是說捕儒,一旦容器生成,就會同時存在兩個文件: image 文件和容器文件。而且關閉容器并不會刪除容器文件刘莹,只是容器停止運行而已阎毅。
# 列出本機正在運行的容器
$ docker container ls
# 列出本機所有容器,包括終止運行的容器
$ docker container ls --all
八点弯、 Dockerfile 文件
學會使用 image 文件以后扇调,接下來的問題就是,如何可以生成 image 文件抢肛?如果你要推廣自己的軟件肃拜,勢必要自己制作 image 文件。
這就需要用到 Dockerfile 文件雌团。它是一個文本文件燃领,用來配置 image。Docker 根據(jù) 該文件生成二進制的 image 文件锦援。
九猛蔽、 容器操作
查看容器:
# 查看正在運行的容器
$ docker ps
-a 查看所有,-l 上一次運行灵寺,-f status=exited 退出的曼库。
創(chuàng)建/運行容器:
docker run
-i 運行;
-t 啟動后進入命令行略板;
-d 啟動后創(chuàng)建一個守護進程進入后臺運行毁枯;
--name 給容器命名;
-v 目錄映射關系 本地目錄:容器目錄
叮称;
-p 端口映射關系 本機端口:容器端口
种玛。
# 使用 centos:7 鏡像創(chuàng)建一個容器,名字為 mycentos瓤檐,啟動并進入命令行
docker run -it --name=mycentos centos:7 /bin/bash
使用 exit
退出赂韵。
# 使用 centos:7 鏡像創(chuàng)建一個容器,名字為 mycentos挠蛉,啟動并進入后臺運行
docker run -id --name=mycentos1 centos:7
使用 docker exec -it mycentos1 /bin/bash
進入命令行祭示。 exit
退出,但是容器不會關閉谴古。
守護式容器要停止運行质涛,使用命令:docker stop mycentos1
即可。
容器創(chuàng)建后掰担,使用命令 docker start mycentos1
啟動汇陆。
目錄映射
docker run -id --name=mycentos2 -v /usr/local/test:/user/local/test1 centos:7
這樣在本地的 /usr/local/test
就映射到容器的 /user/local/test1
目錄,本地的操作會自動同步到容器恩敌。
如果映射的是多級目錄瞬测,可能出現(xiàn)權(quán)限不足的提示。可以在創(chuàng)建容器時需要添加參數(shù):--privileged=true
月趟。
端口映射
docker run -id --name=mycentos3 -p [宿主機端口]:[容器端口] centos:7
查看IP信息
docker inspect [容器名]
或者:
docker inspect --format='{{.NetworkSettings.IPAddress}}' [容器名]
刪除容器
docker rm [容器名/容器id]
注意:無法刪除正在運行的容器灯蝴。
刪除鏡像
docker rmi [鏡像 image id]
注意:無法刪除掛載容器的鏡像。
文件拷貝
docker cp
用于宿主機與容器進行文件/文件夾交換操作孝宗。
docker cp 源文件/文件夾 目標文件/文件夾
十穷躁、 國內(nèi)鏡像
https://lug.ustc.edu.cn/wiki/mirrors/help/docker
或者是用阿里云的鏡像服務,可以創(chuàng)建私人倉庫因妇。
十一问潭、 容器部署
部署一個mysql:
抽取 mysql
docker pull mysql
部署:
docker run -id --name=mymysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
初始化密碼為123456,就可以通過宿主機ip婚被、端口33306 去連這個容器里面的mysql 了狡忙,如果開了防火墻,需要將 33306開放為可訪問址芯。
部署一個 Nginx 容器灾茁。
抽取 Nginx
docker pull nginx
部署:
docker run -id --name=mynginx -p 80:80 nginx
配置文件在容器目錄 /etc/nginx/nginx.conf
。
十二谷炸、容器備份與遷移
- 將容器保存為鏡像:
docker commit [容器名] [鏡像名]
使用 docker images
查看北专。
- 導出:
docker save -o my.rar [鏡像名]
就會在當前目錄導出這個文件。
- 導入
docker local -i my.rar