docker的入門之旅

序言


從docker的出現(xiàn)以來乎赴,它就成為了互聯(lián)網(wǎng)公司的寵兒。換句話說現(xiàn)在牛逼的互聯(lián)網(wǎng)公司的架構(gòu)系統(tǒng)不使用在 Docker之上都不好意思說自己是一個(gè)純粹的互聯(lián)網(wǎng)公司官觅。

本文章會帶領(lǐng)大家了解 Docker 的基礎(chǔ)概念件缸,使用方式和一些使用docker的場景房蝉。

什么是docker?


或許很多同學(xué)都玩過例如這些大名鼎鼎的東西公荧,如:Oracle VM?VirtualBox,VMware Workstation同规。大家都會說這不就是虛擬機(jī)嘛循狰,是的,這些都是業(yè)界大牛公司搞出來虛擬化技術(shù)券勺。用過的同學(xué)都說绪钥,這docker和它們都沒什么區(qū)別,感覺都是虛擬機(jī)关炼。雖然在一定程度上它們的確很類似程腹,但我們不能把docker當(dāng)作是虛擬機(jī),怎么說呢儒拂。因?yàn)閺膁ocker的出現(xiàn)到現(xiàn)在寸潦,docker肯定是比傳統(tǒng)的虛擬機(jī)技術(shù)是更加強(qiáng)大的。首先社痛,docker不與傳統(tǒng)的虛擬機(jī)技術(shù)一樣见转,它不是在你的宿主機(jī)上使用你的硬件進(jìn)行虛擬出另外一個(gè)機(jī)子。但是docker是宿主機(jī)中的一個(gè)進(jìn)程而已蒜哀,它把它自身的網(wǎng)絡(luò) io都隔離成單獨(dú)一個(gè)房間(如同一棟樓斩箫,樓為進(jìn)程,里面的房間都是docker它自身的玩意進(jìn)行隔離)。這樣一來那么和虛擬化相比性能就高了不少乘客,并且它能夠開啟的數(shù)量也足夠的多狐血。

安裝


docker安裝還是比較簡單的,在不同的環(huán)境下有不同的腳本易核。但是我們具體的操作還是遵循官網(wǎng)的安裝文檔進(jìn)行安裝匈织。

本文使用的macos進(jìn)行安裝,具體可以參考docker對應(yīng)的官方文檔耸成。文檔地址:??https://docs.docker.com/docker-for-mac/install/#install-and-run-docker-for-mac

以macos為例子:

安裝完成后進(jìn)行對應(yīng)的終端驗(yàn)證

三大核心概念

image:

?image俗稱鏡像报亩,是docker可分層并且可復(fù)用的,類似于一個(gè)git倉庫井氢。

container:

container俗稱容器弦追,是image鏡像的載體,等同于樓中的房間花竞。具有自己的進(jìn)程劲件,文件等等。

repository:

repository俗稱倉庫约急,總體來說它比較相似于git倉庫零远,它的作用就是將docker容器進(jìn)行構(gòu)建并且打包成一個(gè)鏡像進(jìn)行分發(fā),其他的人可以使用該鏡像進(jìn)行自己環(huán)境厌蔽。

docker命令

1. 查詢對應(yīng)的倉庫是否有包

```?

docker search?包名

```

例如我們需要安裝nginx包牵辣,我們可以使用搜索命令查看使用量最多的包

2.?進(jìn)行對應(yīng)的鏡像下載

``` docker pull 包名 ```

例如我們需要安裝hello-world包,我們可以使用搜索命令查看使用量最多的包奴饮,并且使用下載命令進(jìn)行下載纬向。

進(jìn)行下載排名第一的包

3. 如何查看本地有哪些下載好的鏡像

``` docker images ```

4.?刪除一個(gè)不需要的鏡像

``` docker rmi?鏡像名字 ```

5.創(chuàng)建一個(gè)docker container,返回對應(yīng)的container_id(也就是容器的標(biāo)示)

``` docker create?--name?容器名字?下載好的鏡像名字 ```


6.?啟動(dòng)一個(gè)docker container

``` docker start 對應(yīng)的container_name ```

7. 查詢運(yùn)行中的容器

``` docker ps ```

8. 進(jìn)入容器

``` docker exec -it 容器名字或則是container_id /bin/bash ```

9. run命令戴卜,run命令是create exec start的結(jié)合體

``` docker run --name 容器名字 鏡像名字 /bin/bash ```

10. 停止一個(gè)container

``` docker stop container_id ```

11. 刪除一個(gè)容器

```docker container?rm container_id ```

12.?強(qiáng)制干掉一個(gè)container

```docker container kill 容器名字或則id ```

13. 查詢一個(gè)容器的日志

```docker container logs container_id```

14.?構(gòu)建一個(gè)鏡像

```docker commit?--author"作者名字"--message"描敘信息"啟動(dòng)的container_id?鏡像名字```

15. 推送到遠(yuǎn)程

```docker login?//?輸入帳號密碼后逾条,沒有需要注冊一個(gè)docker?push?images中的名字docker?logout?//?登出 ```

DockerFile

你可以選擇使用基礎(chǔ)鏡像一步步的構(gòu)建,也可以選擇寫一個(gè)配置文件投剥,然后一條命令(docker?build)完成構(gòu)建师脂,顯然配置文件的方式可以更好地應(yīng)對需求的變更,這個(gè)配置文件就是Dockerfile江锨。

整個(gè)要求必須是使用開頭?FROM 鏡像名字?指定鏡像是什么吃警。

基本上指令很類似于linux的命令,具體我們編寫的時(shí)候還是需要參考以下官網(wǎng)文檔的啄育。

https://docs.docker.com/engine/reference/builder/#environment-replacement

現(xiàn)在我們使用dockerfile去構(gòu)建一個(gè)nginx汤徽,并且在根下面創(chuàng)建文件夾和文件并且寫入hello world

``` FROM nginx??

RUN mkdir test_dir \&& cd test_dir \&& touch hello.txt \&& echo "hello world" > hello.txt ```

docker-compose.yaml 配置文件構(gòu)建環(huán)境

相對dockerfile而言docker-compose等同于是寫配置文件,并且我們需要對應(yīng)某個(gè)鏡像單獨(dú)做一些如創(chuàng)建目錄 下載擴(kuò)展等等可以使用dockerfile進(jìn)行輔助構(gòu)建灸撰≮烁基本上docker-compose的配置很多參數(shù)都是相當(dāng)于命令中某些選項(xiàng)拼坎。相對而言,我還是比較喜歡用這種方式去搭建環(huán)境完疫。

我們接下來會使用docker-compose來搭建php環(huán)境泰鸡。

創(chuàng)建文件docker-compose.yml,代碼如下:

``` version: '2'?

services:nginx:restart:alwayscontainer_name:my_nginx? ? # 鏡像image:nginx? ? # 將nginx鏈接到php-fpmlinks:-phpfpm? ? # 端口內(nèi)部80映射80ports:-80:80networks:-code-network? ? # 配置nginx配置映射和項(xiàng)目映射volumes:-./index.html:/usr/share/nginx/html/test/index.html:rw-./index.php:/usr/share/nginx/html/test/index.php:rw? ? ? # 項(xiàng)目配置vhost-./nginx/conf/vhost/default.conf:/etc/nginx/conf.d/default.conf:rw? ? # command: nginx關(guān)閉守護(hù)進(jìn)程command:nginx -g "daemon off;"tty:true?phpfpm:container_name:my_php? ? # docker安裝插件 https://docs.docker.com/samples/library/php/build:./php/networks:-code-networkvolumes:-./index.html:/var/www/html/test/index.html:rw-./index.php:/var/www/html/test/index.php:rwlinks:-mysql-composer?mysql:image:mysql:5.6restart:alwaysports:-"3306:3306"command:mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --init-connect='SET NAMES utf8mb4;'? ? # 環(huán)境變量 https://docs.docker.com/samples/library/mysql/environment:MYSQL_USER:rootMYSQL_ROOT_PASSWORD:ZeIH8QHbdAT6n6uNgaDwmmjG799IZFbhnetworks:-code-network?composer:image:composer?networks:code-network:?

nginx.conf

server{listen80;server_namelocalhost;?root/usr/share/nginx/html;indexindex.html index.htm index.php;?location/ {?? ? }?location~ ^(.+\.php)(.*)${root/usr/share/nginx/html/test;fastcgi_indexindex.php;fastcgi_passphpfpm:9000;# 修改為phpfpm容器fastcgi_paramSCRIPT_FILENAME? /var/www/html/test$fastcgi_script_name;?# 加入path_info環(huán)境變量fastcgi_split_path_info ^(.+\.php)(.*)$;fastcgi_paramPATH_INFO$fastcgi_path_info;fastcgi_paramPATH_TRANSLATED$document_root$fastcgi_path_info;?if(!-e$document_root$fastcgi_script_name) {# 此處直接返回404錯(cuò)誤return404;? ? ? ? }?includefastcgi_params;? ? }}

php插件dockerfile

FROMphp:7.3-fpm?RUNphp -m?RUNdocker-php-ext-install pdo_mysqlRUNdocker-php-ext-install opcache?# redisRUNpecl install -o -f redis \&&? rm -rf /tmp/pear \&&? docker-php-ext-enable redis?

如何啟動(dòng),在對應(yīng)的文件下面 壳鹤,-d表示后臺運(yùn)行

docker-compose up -d

如何退出

docker-compose stop

如何重啟

docker-compose restart

更多命令可以使用--help進(jìn)行查看

查看效果:

?

總結(jié)

相對來說盛龄,docker的使用對軟件的開發(fā),或者部署等等之類的都帶來了極大的便利芳誓,雖然說只是一個(gè)入門的探究余舶。

以上的示例代碼是作為一個(gè)學(xué)習(xí)參考,請不要直接使用到任何項(xiàng)目環(huán)境中锹淌,以上說明純屬個(gè)人的理解匿值。如果你需要深入學(xué)習(xí)docker,我的建議還是需要從官方的詳細(xì)文檔進(jìn)來覽閱赂摆。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末挟憔,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子烟号,更是在濱河造成了極大的恐慌绊谭,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件汪拥,死亡現(xiàn)場離奇詭異达传,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)迫筑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門宪赶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人铣焊,你說我怎么就攤上這事『辈” “怎么了曲伊?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長追他。 經(jīng)常有香客問我坟募,道長,這世上最難降的妖魔是什么邑狸? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任懈糯,我火速辦了婚禮,結(jié)果婚禮上单雾,老公的妹妹穿的比我還像新娘赚哗。我一直安慰自己她紫,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布屿储。 她就那樣靜靜地躺著贿讹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪够掠。 梳的紋絲不亂的頭發(fā)上民褂,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天,我揣著相機(jī)與錄音疯潭,去河邊找鬼赊堪。 笑死,一個(gè)胖子當(dāng)著我的面吹牛竖哩,可吹牛的內(nèi)容都是我干的哭廉。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼期丰,長吁一口氣:“原來是場噩夢啊……” “哼群叶!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起钝荡,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤街立,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后埠通,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赎离,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年端辱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了梁剔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,617評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡舞蔽,死狀恐怖荣病,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情渗柿,我是刑警寧澤个盆,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站朵栖,受9級特大地震影響颊亮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜陨溅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一终惑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧门扇,春花似錦雹有、人聲如沸偿渡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽卸察。三九已至,卻和暖如春铅祸,著一層夾襖步出監(jiān)牢的瞬間坑质,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工临梗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留涡扼,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓盟庞,卻偏偏與公主長得像吃沪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子什猖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容