Docker在我剛出來實(shí)習(xí)的時(shí)候就有接觸到妄迁,那會(huì)只是將公司里制作好的包去客戶那邊進(jìn)行簡單部署瞎惫,只知道Docker是個(gè)容器可以在里面安裝運(yùn)行軟件诀豁,其他一概不知。今天學(xué)習(xí)的時(shí)候剛好遇到Docker的內(nèi)容局扶,特此記錄一下。
為什么有Docker
不使用Docker時(shí)叁扫,開發(fā)人員交付的是jar(或者war包)包三妈,交付完成之后,由運(yùn)維人員進(jìn)行部署莫绣,運(yùn)維人員還需要部署應(yīng)用jar所依賴的環(huán)境(mysql畴蒲、mq等)。這對于跨環(huán)境非常不友好对室,可能出現(xiàn)在我機(jī)器上是好的模燥,在你機(jī)器上卻又問題咖祭,在Linux上是可以的,在windows上卻不行蔫骂。
使用Docker之后么翰,開發(fā)人員交付的是Docker的鏡像,而Docker鏡像中除了有應(yīng)用程序之外還有應(yīng)用程序依賴的環(huán)境辽旋。這樣其他人拿到鏡像之后硬鞍,就可以在任何地方(需要支持Docker)一鍵將應(yīng)用運(yùn)行起來。
Docker是什么
Docker 是一個(gè)開源的應(yīng)用容器引擎戴已。它支持將軟件編譯成一個(gè)鏡像固该;然后在鏡像中各種軟件做好配置,將鏡像發(fā)布出去糖儡,其他使用者可以直接使用這個(gè)鏡像伐坏;
為了更加形象的說明,我們將Docker和Windows鏡像做個(gè)類比握联。我們一般自己安裝系統(tǒng)使用的多是鏡像文件(.gho或.iso)桦沉,安裝完畢我們會(huì)發(fā)現(xiàn)系統(tǒng)中已經(jīng)幫我們裝好了一些常用的軟件及一些配置。這是在制作鏡像文件的時(shí)候金闽,制作者將這些常用的軟件制作進(jìn)去了纯露,而我們對鏡像文件進(jìn)行還原(安裝操作系統(tǒng))時(shí),這些軟件就會(huì)包含在內(nèi)代芜。Docker中的鏡像和windows鏡像系統(tǒng)的常用軟件類似埠褪。
Docker中可以包含多個(gè)鏡像,鏡像一旦運(yùn)行起來就變成了容器挤庇,一個(gè)鏡像可以運(yùn)行多次對應(yīng)多個(gè)容器钞速。這里可以看到,鏡像類似于編程語言中類的概念嫡秕,而容器類似于對象渴语。
核心概念
- Docker客戶端(Client):Docker 客戶端通過命令行或者其他工具使用 Docker API 和Docker主機(jī)進(jìn)行交互。
- Docker主機(jī)(Host):安裝了Docker程序的機(jī)器昆咽。
- Docker倉庫(Registry):用來保存鏡像驾凶,類似于代碼倉庫。
- Docker鏡像(Images):是用于創(chuàng)建 Docker 容器的模板掷酗,放在Docker倉庫當(dāng)中调违。
- Docker容器(Container):獨(dú)立運(yùn)行的一個(gè)或一組應(yīng)用。
Docker架構(gòu)圖
Docker倉庫分為公共的和私人的汇在,公共的Docker倉庫可以訪問https://hub.docker.com進(jìn)行查看翰萨,類似于Maven的公共倉庫。
Docker安裝
推薦使用Centos糕殉,可以直接使用yum亩鬼,安裝起來很方便殖告。
1、檢查內(nèi)核版本雳锋,必須是3.10及以上
uname -r
2黄绩、安裝docker
yum install docker
3、輸入y確認(rèn)安裝
4玷过、啟動(dòng)docker
[root@localhost ~]# service start docker
[root@localhost ~]# docker -v
Docker version 1.13.1, build 94f4240/1.13.1
5爽丹、開機(jī)啟動(dòng)docker
[root@localhost ~]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service
to /usr/lib/systemd/system/docker.service.
6、停止docker
service stop docker
啟動(dòng)Docker服務(wù)
[root@localhost ~]# service docker start --或者systemctl docker start
關(guān)閉Docker服務(wù)
[root@localhost ~]# service docker stop --或者systemctl docker stop
使用Docker的步驟:
1)辛蚊、安裝Docker
2)粤蝎、去Docker倉庫找到這個(gè)軟件對應(yīng)的鏡像;
3)袋马、使用Docker運(yùn)行這個(gè)鏡像初澎,這個(gè)鏡像就會(huì)生成一個(gè)Docker容器;
4)虑凛、對容器的啟動(dòng)停止就是對軟件的啟動(dòng)停止碑宴;
HelloWorld
安裝完成之后,我們來運(yùn)行一下Docker
提供的hello world
$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:d58e752213a51785838f9eed2b7a498ffa1cb3aa7f946dda11af39286c3db9a9
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
docker 鏡像運(yùn)行流程圖
Docker常見操作
1)桑谍、幫助命令
命令 | 說明 | |
---|---|---|
docker version | 顯示docker的版本信息 | |
docker info | 顯示docker的系統(tǒng)信息延柠,包括鏡像和容器的數(shù)量 | |
docker 命令 --help | 幫助命令 |
2)、鏡像操作
操作 | 命令 | 說明 |
---|---|---|
檢索 | docker search 關(guān)鍵字 eg:docker search redis | 我們經(jīng)常去docker hub上檢索鏡像的詳細(xì)信息锣披,如鏡像的TAG贞间。 |
拉取 | docker pull 鏡像名:tag | :tag是可選的,tag表示標(biāo)簽盈罐,多為軟件的版本榜跌,默認(rèn)是latest |
列表 | docker images | 查看所有本地鏡像 |
刪除 | docker rmi image-id | 刪除指定的本地鏡像 |
構(gòu)建 | docker build | 構(gòu)建鏡像,通常情況下都是通過Dockerfile文件來構(gòu)建鏡像 |
2)盅粪、容器操作
1、搜索鏡像
[root@localhost ~]# docker search tomcat
2悄蕾、拉取鏡像
[root@localhost ~]# docker pull tomcat
3票顾、根據(jù)鏡像啟動(dòng)容器
docker run --name mytomcat -d tomcat:latest
4、docker ps
查看運(yùn)行中的容器
5帆调、 停止運(yùn)行中的容器
docker stop 容器的id
6奠骄、查看所有的容器
docker ps -a
7、啟動(dòng)容器
docker start 容器id
8番刊、刪除一個(gè)容器
docker rm 容器id
9含鳞、啟動(dòng)一個(gè)做了端口映射的tomcat
[root@localhost ~]# docker run -d -p 8888:8080 tomcat
-d:后臺(tái)運(yùn)行
-p: 將主機(jī)的端口映射到容器的一個(gè)端口 主機(jī)端口:容器內(nèi)部的端口
10、查看容器的日志
docker logs container-name/container-id
更多命令參看
https://docs.docker.com/engine/reference/commandline/docker/
可以參考每一個(gè)鏡像的文檔
注意芹务,在Docker中啟動(dòng)一個(gè)應(yīng)用時(shí)蝉绷,一定要做端口映射鸭廷。不然客戶端是無法訪問到主機(jī)中的Docker容器。
Docker中安裝軟件
Docker中安裝MySQL
- 查找MySQL熔吗,然后拉取鏡像
docker search mysql
docker pull mysql
可以直接跳過步驟1辆床,從步驟2開始執(zhí)行。當(dāng)運(yùn)行步驟2時(shí)發(fā)現(xiàn)本地沒有回去遠(yuǎn)程下載對應(yīng)的鏡像桅狠。
- 創(chuàng)建容器
docker run -d -p 3310:3306 -v /Users/zhangguicong/volumes/mysql/conf:/etc/mysql/conf.d -v /Users/zhangguicong/volumes/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
–name:給新創(chuàng)建的容器命名讼载,此處命名為mysql01
-e:配置信息,此處配置mysql的root用戶的登陸密碼
-p:端口映射中跌,此處映射主機(jī)3307端口到Docker容器mysql1的3306端口
-d:后臺(tái)運(yùn)行
-v: 卷掛載
3.如果想要外面可以訪問Docker中的MySQL咨堤,需要先進(jìn)行授權(quán)。
3.1 先進(jìn)入容器的命令模式
docker exec -it mysql1 /usr/bin/bash
3.2 然后登錄MySQL進(jìn)行授權(quán)操作
mysql -uroot -p
grant all privileges on *.* to root@"%" identified by "123456" with grant option;
Docker 安裝 MySQL
Docker 安裝 Tomcat
Docker 安裝 Redis
Dockerfile
Dockerfile是一個(gè)普通的文本文件漩符,里面包含了許多可以在命令行接口上執(zhí)行的用來構(gòu)建鏡像的相關(guān)指令一喘,我們通過docker build指令就可以讀取Dockerfile文件中的指令并執(zhí)行自動(dòng)化鏡像構(gòu)建。
一般情況下陨仅,Dockerfile文件可分為四個(gè)部分:基礎(chǔ)鏡像信息津滞、維護(hù)者信息、鏡像操作指令和容器啟動(dòng)時(shí)的執(zhí)行指令灼伤。