docker從入門到實戰-基礎篇

docker從入門到實戰-基礎篇

docker基礎

前言

本文是我通過三個星期業餘時間學習後而寫的文章,對docker的瞭解還處於入門階段。希望本文能幫忙一些想學習docker的朋友快速入門。練習及實戰代碼都在github倉庫中。如果我的文章能幫助到你的話,可以給我的docker項目點個贊哦

介紹

docker是一個開源的應用容器引擎,開發者可以打包自己的應用到容器裏面,然後遷移到其他機器的docker應用中,可以實現快速部署。如果出現的故障,可以通過鏡像,快速恢復服務。

舉個例子,公司一般都會有多套環境,那麼如何保持多套的運行環境一致,這個時候就可以用到docker。且當要求增加一套環境的時候,你無需在一個新服務器上一個個環境安裝、配置。只需要運行下docker。同時官方還提供了Docker Hub,擁有大量的高質量的官方鏡像。你可以將自己的鏡像上傳上去。有點類似於github

安裝

官方提供了安裝教程,挺詳細的。官方安裝教程

docker起步

第一步:執行下docker -v確認下是否成功安裝了docker

如果成功安裝了,命令行將會輸出入docker的版本號。如下:
Docker version 18.09.2, build 6247962

docker的整個生命週期大致可分爲:

  1. 鏡像
  2. 容器
  3. 倉庫

這裏以ubuntu鏡像爲例,介紹下鏡像

在下載ubuntu鏡像之前運行下docker images(查看鏡像命令)查看下本地的鏡像。如果你還沒下載過鏡像的話,當然會出現空。這裏貼下我本地的鏡像

➜ study-docker git:(master) ✗ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
todolist_static latest de5e325037e9 2 hours ago 1.05GB
todolist_nodejs latest 53efd80e03e1 2 hours ago 898MB
ubuntu 18.04 7698f282e524 4 weeks ago 69.9MB
mysql latest 990386cbd5c0 5 weeks ago 443MB
node 8 a5c31320f223 6 weeks ago 895MB
mysql 5.6 73829d7b6139 6 weeks ago 256MB

使用拉取鏡像命令docker pull 拉取ubuntu鏡像:docker pull ubuntu。當你不指定版本時,默認拉取latest版本。

➜ study-docker git:(master) ✗ docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
5b7339215d1d: Pull complete 
14ca88e9f672: Pull complete 
a31c3b1caad4: Pull complete 
b054a26005b7: Pull complete 
Digest: sha256:9b1702dcfe32c873a770a32cfd306dd7fc1c4fd134adfb783db68defc8894b3c
Status: Downloaded newer image for ubuntu:latest
➜ study-docker git:(master) ✗ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 4c108a37151f 12 hours ago 64.2MB

也可安裝指定版本鏡像:docker pull ubuntu:18.04

接下來基於ubuntu鏡像啓動一個容器

docker run --name first -it ubuntu bash

  • --name 用於指定容器名
  • it 用於交互式命令行操作,如下面例子運行後,會打開容器的命令行
  • 上面的ubuntu指的鏡像,默認基於latest。除非指定版本 如ubuntu:18.04

運行上面的命令後,命令行工具就會自動進入容器的命令行。如果想要退出該命令行界面,可輸入exit以退出。

➜ study-docker git:(master) ✗ docker run --name first -it ubuntu bash
root@b7862a018c2c:/# 

如果想讓該容器在後臺運行可以通過加-d配置來讓該容器在後臺運行。後臺運行,命令行工具不會進入該容器。

使用docker ps查看當前運行中的容器。

➜ study-docker git:(master) ✗ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cf8375f48225 ubuntu "bash" 15 seconds ago Up 14 seconds first

使用-d來讓容器在後臺運行

➜ study-docker git:(master) ✗ docker run --name first -itd ubuntu bash
6df29a09d1f1bb0041b7eb59b5288162471ed8a663007f88c6a30e3fd1f4fbe2

命令行會返回容器id

使用docker container ls 查看所有容器列表(不包括停止運行的容器)

➜ study-docker git:(master) ✗ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cf8375f48225 ubuntu "bash" About a minute ago Up About a minute first

使用docker stop <容器id或容器名稱>停止容器的運行。

➜ study-docker git:(master) ✗ docker stop 6df29a09d1f1
6df29a09d1f1

執行命令後,會返回你剛輸入容器的id。上面的容器id不需要填全。就想git的commit id一樣。

這個時候通過docker container ls是查不到容器信息的。需要用docker container ls -a來查看。

➜ study-docker git:(master) ✗ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6df29a09d1f1 ubuntu "bash" 5 minutes ago Exited (0) 4 minutes ago

可以看到STATUS一欄處,該容器是處於停止狀態的。

使用docker rm <容器id 或者 容器暱稱>

➜ node git:(master) docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a217eea7188f ubuntu "/bin/bash" 11 seconds ago Exited (0) 10 seconds ago dreamy_ishizaka

執行docker rm a21 (id可以不輸全)

➜ node git:(master) docker rm a21
a21

執行完之後,命令行會返回之前輸入的容器id

使用docker container prune,來清空停用狀態的容器。

使用docker exec命令進入運行中的容器

如想進入剛纔後臺運行的容器的交互式界面:docker exec -it <容器名稱 或者 容器id> bash

➜ study-docker git:(master) ✗ docker exec -it first bash
root@2a87b2f62a6e:/#

想查看更多關於docker的命令,點擊這裏

Dockerfile

舉個node鏡像的例子

新建一個文件夾

我這裏就新建一個名爲node的文件夾,具體文件可參照我的github項目的node目錄

// index.js
const express = require('express');
const app = express();
app.get('/', (req, res) => {
    res.end('success')
})
app.listen(6001)
// Dockerfile
FROM node:8
WORKDIR /home/node
COPY ../ ../
RUN npm install
CMD npm start

指令介紹

  • FROM 我這個node例子是基於node8鏡像
  • WORKDIR 指定工作區。
  • COPY 將本地目錄文件拷貝到docker中
  • RUN 運行一個容器,每個RUN都會生成一個容器
  • CMD 執行命令,與RUN相似
注意 有必要添加.dockerignore文件,文件中可以填寫你不想打包進容器的文件。類似於.gitignore
// .dockerignore
/node_modules
package-lock.json

詳細解釋,詳見dockerfile

docker build 命令用於使用 Dockerfile 創建鏡像

執行:docker build -t mynode .;

  • -t: 鏡像的名字及標籤,通常 name:tag 或者 name 格式;可以在一次構建中爲一個鏡像設置多個標籤。tag不寫默認爲latest版本

要注意後面的. 這個表示Dockerfile文件在當前目錄。
構建鏡像成功之後:

➜ node git:(master) ✗ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mynode latest 3cd10521f802 10 hours ago 898MB

接下來就基於該鏡像運行一個node容器:

docker run --name mynode -p 4001:6001 mynode

  • --name: 表示該容器的匿名
  • -p: 表示端口映射,因爲主機的ip跟容器的ip是不同的,需要把容器的服務映射到0.0.0.0:自己設置的主機端口,host不填默認爲0.0.0.0。 <主機端口>:<容器中端口>;
➜ node git:(master) ✗ docker run --name mynode -p 4001:6001 mynode
> [email protected] start /home/node
> node index.js

瀏覽器訪問localhost:4001,頁面會展示出node響應的success字符串了。

構建完鏡像後,你覺得不需要該鏡像,想刪除怎麼辦呢?

首先執行:docker images列出鏡像列表

➜ node git:(master) ✗ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mynode latest 3cd10521f802 10 hours ago 898MB

使用docker rmi <image id>來刪除鏡像:docker rmi 3cd10521f802,如果提醒該鏡像被容器佔用着,那麼你就需要先刪除該容器(參考上面介紹的命令)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章