Docker 學習筆記(一)

0x00 前言

一直使用過docker,但並不是太瞭解,於是開始學習瞭解一下

0x01 docker簡介

1、什麼是容器?

  • 一種虛擬化的方案
  • 操作系統級別的虛擬化
  • 只能運行相同或相似內核的操作系統
  • 依賴於Linux內核特性: Namespace和Cgroups (Control Group)

2、容器技術有哪些優點?
在這裏插入圖片描述

  • 磁盤佔用空間少
  • 提供更多的服務能力和服務更多的用戶

3、什麼是Docker?
Docker是能將應用程序自動部署到容器的開源引擎。
使用Go語言編寫(Go語言開源引擎) 項目地址
基於Apache2.0開源授權協議發行

docker的特別之處:
docker在虛擬化的容器執行環境中增加了一個應用部署引擎。該引擎目標提供一個輕量、快速的環境。
方便從開發者環境->測試環境->生產環境
4、Docker有哪些特點?(Docker的目標)

  • 提供簡單輕量的建模方式
  • 職責的邏輯分離
  • 快速高效的開發生命週期
  • 鼓勵使用面向服務的架構

5、Docker的使用場景

  1. 使用Docker容器開發、測試、部署服務
  2. 創建隔離的運行環境
  3. 搭建測試環境
  4. 構建多用戶的平臺即服務(PaaS)基礎設施
  5. 提供軟件即服務(SaaS)應用程序
  6. 高性能、超大規模的宿主機部署

6、Docker的基本組成

Docker Client 客戶端
Docker Daemon 守護進程
Docker Image 鏡像
Docker Container 容器
Docker Registry 倉庫

1.Docker客戶端/守護進程:
(1)C/S架構
(2)本地/遠程
2.Docker Image 鏡像:
(1)容器的基石
(2)層疊的只讀文件系統
(3)聯合加載(union mount)
在這裏插入圖片描述
3.Docker Container 容器:
(1)通過鏡像啓動
(2)啓動和執行階段
啓動時,在鏡像的最頂層加載一個讀寫文件系統(可寫層)
(3)寫時複製
4.Docker Registry 倉庫:
(1)公有:Docker Hub
(2)私有:可自己架設

0x02 安裝docker

1、驗證是否安裝curl

驗證是否安裝了curl

which curl

如果沒有安裝則進行安裝

sudo apt-get update
sudo apt-get install curl

2、使用官方腳本自動安裝docker

curl -fsSL https://get.docker.com/ubuntu/|sudo sh
或curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

3、通過版本庫安裝docker

1.在Ubuntu中建立ce存儲庫
(1)更新apt資源包

sudo apt-get update

(2)安裝軟件包以允許apt通過HTTPS使用存儲庫

sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

(3)添加Docker的官方GPG密鑰

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

可使用以下命令進行驗證祕鑰指紋 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88

sudo apt-key fingerprint 0EBFCD88

(4)可選設定穩定存儲庫,可不設置,則自動使用(deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable)

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu  xenial  stable"

2.安裝docker-ce並配置docker
(1)更新apt資源包,並進行安裝docker-ce

sudo apt-get update
sudo apt-get -y install docker-ce

:如果需要安裝特定版本,則使用以下命令獲取可用的版本號,使用要安裝的版本號進行安裝

apt-cache madison docker-ce
sudo apt-get install -y docker-ce=<VERSION>
例如:docker-ce=18.03.0~ce-0~ubuntu

(2)基礎安裝完成,可以先進行測試一下是否可用

sudo docker version
sudo docker run hello-world

4、配置與卸載docker

1.配置docker
(1)省略sudo命令(感覺sudo麻煩的,可以執行這一步)
如果執行時不想使用sudo命令,可以進行設置用戶組,並將當前用戶增加到該組中

sudo groupadd docker
sudo usermod -aG docker $USER
註銷一下,再執行以下命令
docker run hello-world

(2)添加阿里雲docker加速器和ip修改(不是必須的)

{
    "registry-mirrors": ["https://(yourid).mirror.aliyuncs.com"],
    "bip":"192.168.1.1/24"
}

2.卸載docker
(1)卸載docker-ce

sudo apt-get purge docker-ce

(2)刪除鏡像、容器、卷

sudo rm -rf /var/lib/docker

0x03 docker容器

1、容器的基本操作

1.啓動容器

docker run IMAGE [COMMAND][ARG..]
#IMAGE啓動容器所用鏡像
#COMMAND和ARG容器啓動後運行的命令和參數
如:輸出Hello World
root@qwzf:~# docker run ubuntu echo 'Hello World'
Hello World

2.啓動交互式容器

docker run -i -t IMAGE /bin/bash
#-i 始終打開標準輸入 --interactive=true|false 默認false
#-t 爲創建的容器分配一個僞tty終端 --tty=true|false 默認是false
如:
root@qwzf:~# docker run -i -t ubuntu /bin/bash
root@c12aa40c4376:/# 

3.查看容器

docker ps [-a][-l]
#沒有參數時,列出正在運行的容器
#-a 列出所有容器
#-l 列出最新創建的容器
查看已經建立起的容器
docker inspect id/容器名

4.自定義容器名

docker run --name=自定義名 -i -t IMAGE /bin/bash

5.重新啓動停止的容器

docker start [-i] id/容器名
#-i可以以交互的方式來重新啓動

6.刪除停止的容器

docker rm id/容器名

2、守護式容器

1.什麼是守護式容器

  • 長期運行
  • 沒有交互式會話
  • 適合運行應用程序和服務

2.以守護形式運行容器

運行:
docker run -i -t IMAGE /bin/bash
退出交互式bash(這樣容器就會在後臺運行):
Ctrl+P Ctrl+Q

3.附加到運行中的容器(再次進入容器)

docker attach id/容器名

4.啓動守護式容器

docker run -d IMAGE [COMMAND][ARG..]
#-d 啓用容器時使用後臺的方式執行命令

5.查看容器日誌

docker logs [-f][-t][--tail] 容器名
#-f 一直跟蹤logs變化並返回結果 --folloes=true|false 默認false
#-t 在返回的結果上加上時間戳 --timestamps=true|false 默認false
#--tail 返回結尾處多少數量的日誌 默認--tail="all"
如:顯示最新的日誌
root@qwzf:~# docker logs -tf --tail 0 容器名

6.查看容器內進程

docker top 容器名

7.在運行中的容器內啓動新進程

docker exec [-d][-i][-t] 容器名 [COMMAND][ARG..]
如:
docker exec -i -t c12aa40c4376 /bin/bash
退出:Ctrl+P Ctrl+Q
查看:docker top c12aa40c4376

8.停止守護式容器

docker stop 容器名
#發送一個信號給容器,等待容器的停止
docker kill 容器名
#直接停止容器

0x04 docker鏡像

存儲位置:/var/lib/docker
查看存儲驅動和存儲位置:docker info

1、查看和刪除鏡像

1.列出鏡像

docker images [選項] [REPOSITORY]
#-a 顯示所有鏡像,默認不顯示中間層鏡像,--all=false 
#-f 顯示時的過濾條件,--filter=[]
#--no-trunc 不使用截斷的方式顯示數據
#-q 只顯示鏡像的唯一d,--quiet=false

在這裏插入圖片描述
2.鏡像標籤和倉庫
(1)鏡像的倉庫 REPOSITORY
REPOSITORY 倉庫:一系列鏡像的集合
REGISTRY 倉庫:docker鏡像的存儲服務
(2)鏡像標籤 TAG
不同鏡像以標籤進行區分
倉庫名+標籤名->鏡像名 對應一個鏡像的id

ubuntu:14.04
ubuntu:latest 默認

3.查看鏡像

docker inspect [OPTIONS] CONTAINER|IMAGE [CONTAINER|IMAGE...]
#-f,--format=""
如:docker inspet ubuntu:14.04

4.刪除鏡像

docker rmi [OPTIONS] IMAGE [IMAGE...]
#-f 強制刪除鏡像
#--no-prune 保留被打標籤的父鏡像
如:
刪除單個:docker rmi 鏡像id
刪除多個:docker ubuntu:12.04 ubuntu:14.04
刪除對應的所有鏡像:
docker rmi $(docker images -q ubuntu)

2、獲取和推送鏡像

1.查找鏡像
(1)Docker Hub
(2)docker search [OPTIONS] TERM

–automated 自動化,只會顯示自動化構建的鏡像
–no-trunc 不使用截斷的方式顯示數據
-s,–stars=0 限制顯示的最低星級

docker search -s 3 ubuntu

2.拉取鏡像

docker pull [OPTIONS] NAME [:TAG]
#-a 匹配並下載所有標記的鏡像
如:docker pull ubuntu:14.04

3.推送鏡像

docker push NAME[:TAG]

3、構建鏡像

  • 保存對容器的修改,並再次使用
  • 自定義鏡像的能力
  • 以軟件的形式打包並分發服務及其運行環境
docker commit 通過容器構建
docker build 通過Dockerfile文件構建

1.使用commit構建鏡像

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
#-a 指定鏡像作者
#-m 記錄鏡像構建信息
#-p 不暫停正在運行的容器
如:
docker commit -a 'qwzf' -m 'nginx' 容器名 qwzf/test1(qwzf/test1 可以隨便填)

2.使用Dockerfile構建鏡像
Dockerfile文件:包含一切命令的文本文件
(1)創建Dockerfile

#First Dockerfile
FROM ubuntu:14.04
MAINTAINER qwzf "註冊郵箱"
RUN apt-get update
RUN apt-get install -y nginx
EXPOSE 80

(2)適用docker build 命令

docker build [OPTIONS] PATH |URL|-
#--force-rm
#--no-cache
#--pull
#-q
#--rm=true
#-t,tags="" 指定構建出鏡像的名字
如:docker build -t='qwzf/test2'

每執行一步返回唯一id,即中間層鏡像

0x05 docker的一些安裝

1、安裝LAMP

可能用到的命令

#拉取鏡像
docker pull tutum/lamp
#查看鏡像
docker images
#啓動容器並綁定端口
docker run -d -p 8080:80 -p 3306:3306 -v /var/www/app/:/var/www/html tutum/lamp
#查看運行的容器
docker ps
docker ps -a
#進入正在運行的容器
docker exec -it 'id/name' /bin/bash  
#退出容器
exit
#開啓、重啓、停止容器
docker start 'id/name'
docker restart 'id/name'
docker stop 'id/name'

具體安裝過程如下:
1.查詢鏡像

root@qwzf:~# docker search lamp
NAME                          DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
linode/lamp                   LAMP on Ubuntu 14.04.1 LTS Container            179                                     
mattrayner/lamp               A simple LAMP docker image running the prere…   170                                     [OK]
tutum/lamp                    Out-of-the-box LAMP image (PHP+MySQL)           132                                     
greyltc/lamp                  a super secure, up-to-date and lightweight L…   99                                      [OK]
fauria/lamp                   Modern, developer friendly LAMP stack. Inclu…   79                                      [OK]

2.拉取鏡像

docker pull tutum/lamp

3.啓動守護式容器並端口映射和掛載目錄

root@qwzf:~# docker run --name=lamp -d -p 8080:80 -p 3306:3306 -v /var/www/app/lamp/:/var/www/html tutum/lamp
#8080 宿主機端口 80 docker端口
#/var/www/app/lamp/ 宿主機要掛載的目錄
#/var/www/html docker上被掛載的位置

在這裏插入圖片描述

2、安裝LNMP

1.查詢鏡像

docker search lnmp

2.拉取鏡像

docker pull winstonpro/lnmp

3.啓動守護式容器並端口映射和掛載目錄

root@qwzf:~# docker run --name=lnmp -d -p 8000:80 -p 3000:3306 -v /var/www/app/lnmp/:/usr/share/nginx/html winstonpro/lnmp

在這裏插入圖片描述

3、安裝vim

方式一:默認源安裝
執行apt-get update更新源

root@dc3d333fc181:~# apt-get update

更新完過後我們就可以安裝了vim了

root@dc3d333fc181:~# apt-get install vim

以上的方式雖然可以實現安裝vim,但是速度很慢。下面是更快的方式
方式二:aliyun源安裝
因爲沒有vi,vim編輯工具,我這裏使用sed命令進行編輯文件內容。
首先查看默認源地址:

root@dc3d333fc181:~# cat /etc/apt/sources.list
# deb http://snapshot.debian.org/archive/debian/20200130T000000Z buster main
deb http://deb.debian.org/debian buster main
# deb http://snapshot.debian.org/archive/debian-security/20200130T000000Z buster/updates main
deb http://security.debian.org/debian-security buster/updates main
# deb http://snapshot.debian.org/archive/debian/20200130T000000Z buster-updates main
deb http://deb.debian.org/debian buster-updates main

從上面的輸出內容我們可以看出,默認會從deb.debian.org去更新源信息。我們將其替換爲aliyun的源地址:

root@dc3d333fc181:~# sed -i s@/deb.debian.org/@/mirrors.aliyun.com/@g /etc/apt/sources.list

替換完源後我們就可以安裝vim了

root@dc3d333fc181:~# apt-get clean
root@dc3d333fc181:~# apt-get update
root@dc3d333fc181:~# apt-get install vim

0x06 後記

暫時就先學這麼多吧!本次學習Docker我學習了docker的安裝、docker容器和docker鏡像的一些操作,以及簡單的端口映射和目錄掛載。同時也學習了LAMP和LNMP環境的使用docker進行自動化安裝。總的來說,收穫很大,繼續努力!!!

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