docker基礎(chǔ)(一)

記錄時間:?2020-03-03


菜鳥教程: https://www.runoob.com/docker/docker-commit-command.html

1.Docker是一個C/S類型的架構(gòu)的容器

? ?一般來說,用戶通過client端進行相應操作,然后對應操作指令會傳遞到server端,然后交由server

? 端的Docker daemon處理.

2.images

Docker images 也叫做Docker鏡像,鏡像一般是只讀模板,用戶不可以直接對其進行寫入操作.


3.containers

Docker containers 也叫做Docker容器,容器與容器之間互相隔離,互不干擾,容器可以進行被開始,啟動,停止,刪除等操作.

開發(fā)者快速地把自己的應用打包到容器中進行發(fā)布.


4. registries

Docker registries也叫做Docker倉庫,倉庫主要是用來下載鏡像的,倉庫分為共有倉庫和私有倉庫.

5.在linux系統(tǒng)centos7版本上安裝docker(配置一個靜態(tài)橋接的網(wǎng)址

我這里使用的是Oracle? VM virtualBox

如果電腦同時安裝了Vmware 和virtualBox 那么可能會有一個的虛擬機網(wǎng)絡配置會不通,我踩過此坑
我后面覺得是 兩個虛擬機的網(wǎng)關(guān)不一樣 一個是 xxx.xxx.xxx.1 一個好像是?xxx.xxx.xxx.2

這只是猜測.

)

yum -y install docker?

6.啟動docker服務

? systemctl start docker
? 6.1 查看docker信息

? docker info
docker images 查看沒鏡像

7.創(chuàng)建鏡像的4種方式


7.1.下載鏡像(這里獲取也算一種方式)
docker pull?ubuntu:14.04?
也能下載 但是不知道出處.
原因:

?ubuntu 鏡像在? https://docs.docker.com 網(wǎng)站
但是這個網(wǎng)站得注冊才行??

注冊的倉庫是空的需要自己創(chuàng)建,
也不知道 公共得鏡像再哪里.


7.2.在鏡像打開一個容器,然后修改后 再創(chuàng)建一個鏡像

docker run -ti ubuntu:14.04
exit

docker commit -m "this is a new images" -a "root" e483 ubuntuu02:1889

-m :提交時的說明文字;

-a :提交的鏡像作者;

注意:?e483 是 創(chuàng)建容器的id 取前4位就行

docker images? 就可以查看到

7.3 使用本地模板導入?

模板下載地址

https://wiki.openvz.org/Download/template/precreated

選中一個版本 右擊復制鏈接地址


說白了就是下載一個壓縮包,

然后 通過命令 創(chuàng)建一個鏡像就行了

wget 鏈接地址

比如:?wget http://download.openvz.org/template/precreated/ubuntu-16.04-x86_64.tar.gz

創(chuàng)建鏡像:

cat ubuntu-16.04-x86_64.tar.gz |docker import - ubuntu:7789

docker images 既可以查看到一個 名稱為 ubuntu; tag為7789的鏡像


7.4 利用Dockerfile 文件來創(chuàng)建鏡像


這里我們創(chuàng)建一個目錄: test

mkdir test?

在test 目錄中

創(chuàng)建 Dockerfile 文件

然后編輯 Dockerfile 文件

vim Dockerfile

內(nèi)容如下: 只是簡單的創(chuàng)建而已

FROM ubuntu:7789

RUN touch cc.txt

RUN mkdir wendang

保存退出

然后:?

docker build -t="ubuntutu002:v1" /test

這里注意: 是Dockerfile文件所在的目錄就行

8. 刪除鏡像:

命令就是:

docker rmi 鏡像名:tag

比如 docker rmi??ubuntutu002

注意:不加tag 只會刪除? tag 為latest的

還有一個例外:

就是運行當中的 鏡像容器是不能刪除的


如果還要刪除,那么就先刪除容器 再刪除鏡像.

docker stop af00

docker rm af00

docker rmi??ubuntutu002:v1


9.鏡像的存出與導入

鏡像的存出先當與備份,會把現(xiàn)在的操作系統(tǒng)運行的鏡像備份一份出來.

鏡像的導入,相當于鏡像備份恢復,會把之前的鏡像備份重新導入操作系統(tǒng)運行.

存出:

docker save -o ubuntu01-bak.tar docker.io/ubuntu:14.04

導入:

導入之前先刪除原鏡像(刪除原鏡像還需要刪除 關(guān)聯(lián)的 容器 不然刪除不掉)
docker load --input ubuntu01-bak.tar

再查看?

docker images


10.容器的創(chuàng)建實戰(zhàn)

docker run -ti --name dd docker.io/ubuntu:14.04

-t 分配一個偽終端并綁定到容器的標準輸入上,

-i 讓容器的標準輸入保持打開

--name 給創(chuàng)建的容器起個名字 這里起的名字是dd

11.容器的管理

容器的啟動主要分為兩種方式:


1.1創(chuàng)建 就是 docker run -ti 鏡像名:tag

比如: docker run -ti --name dd ubuntu:v1 交互式

1.2? 后臺啟動狀態(tài)創(chuàng)建

比如: docker run -d docker.io/ubuntu:14.04?

2. 把終止狀態(tài)的容器啟動

docker start? ed56

docker stop ed56? ed56是 id 容器id 前4位.

12.容器的依附

容器start 后或者以后臺的方式創(chuàng)建啟動后,想進入到容器的執(zhí)行界面那么:

docker attach ed56 就進入到了容器的執(zhí)行界面

13.容器的日志查看
?docker logs --tail=2 -f 53da
--tail=2 顯示最近的2條 -f 是循環(huán)顯示? 53da是容器的id

14.查看容器的進程

docker ps 查看正在運行的容器

docker ps -a 查看所有容器信息

docker ps -l 查看最后一次創(chuàng)建的容器

docker ps -q? 查看正在運行的容器id


15. 容器內(nèi)命令執(zhí)行實戰(zhàn)

1.1 創(chuàng)建容器并進入容器執(zhí)行:

? ?docker run -ti ubuntu:1889? /bin/bash

? ?exit

1.2 退出去的容器 啟動

? ? ?docker start 3e59

? ? ?docker attach 3e59


1.3? 以后臺方式執(zhí)行

前提是容器啟動狀態(tài):

docker start 3e59

docker exec -d 3e59 touch 9898.txt

-d 表示以后臺方式執(zhí)行

docker exec -ti 3e59 mkdir /hello198

docker attach 3e59

后臺和交互式區(qū)別:


16. 容器的導出

docker export 3e59 > 3e59.tar

17.容器的導入

這里需要說明一下:

當我們想把某個容器的壓縮文件導入恢復為容器的時候,我們需要通過 docker?

import 指令進行容器的導入操作.

由于容器是基于鏡像而創(chuàng)建的,其核心特征是在鏡像上創(chuàng)建的,

所以,容器的導入過程可以這樣:首先把容器壓縮文件導入為一個鏡像,

然后基于該鏡像創(chuàng)建一個容器,則此時創(chuàng)建的新容器跟原容器性能一致,

該過程即為容器的導入操作.

總之就是 容器導入為鏡像 再創(chuàng)建新容器

cat 3e59.tar | docker import - bac:v1

docker import -? bac:v1??

說明? import? 后面的 一橫桿 是寫的 前后空格空開

bac 新鏡像的名稱 v1就是 新tag?


18.數(shù)據(jù)卷的4特性:(共享文件)

1. 數(shù)據(jù)卷可以在容器之間共享和重(chong 二聲)用;

2.對數(shù)據(jù)卷的修改會立馬生效

3.對數(shù)據(jù)卷的更新,不會影響鏡像

4.卷會一直存在,直到?jīng)]有容器使用

意義是:如果修改了文件內(nèi)容那么其他地方也可以看到

很好的使用

實例:

1.先掛載目錄

在主機中創(chuàng)建 gztest 目錄

然后

docker run -ti -v /gztest:/contest bac:v1 /bin/bash

意思是?

主機中創(chuàng)建的gztest 掛載到容器的contest目錄中


如果沒有權(quán)限 那么

docker run -ti -v /gztest:/contest --privileged=true bac:v2 /bin/bash

添加privileged=true? 即可.

2.掛載文件


docker run -ti -v /abc.txt:/co/b.txt --privileged=true bac:v1 /bin/bash


19.? 數(shù)據(jù)卷容器

所謂的數(shù)據(jù)卷容器,其實質(zhì)上,是容器,但是這個容器是一個專門用來提供數(shù)據(jù)卷的容器.

那么,為什么要有數(shù)據(jù)卷容器呢?

因為有的時候,我們會有一些數(shù)據(jù)需要持續(xù)更新,并且這些數(shù)據(jù)需要在容器間進行共享,那么此時,如果有一個專門的容器來提供數(shù)據(jù)卷,將會方便很多.所以,如果我們要解決數(shù)據(jù)的持久化問題,我們應當選用數(shù)據(jù)卷容器.

實例:

先創(chuàng)建數(shù)據(jù)卷容器

docker run -ti -v /abc --name data1 bac:v1 /bin/bash

然后

docker run -ti --volumes-from 5df6 docker.io/ubuntu:14.04 /bin/bash

5d6f 就是?data1 的id

然后 就可以共享 5d6f容器的abc目錄了.

20.數(shù)據(jù)遷移

數(shù)據(jù)遷移,是指在有必要的時候,將數(shù)據(jù)卷容器的數(shù)據(jù)卷中的數(shù)據(jù)全部

轉(zhuǎn)移到一個新的地方.

原理: 首先將數(shù)據(jù)卷容器的相應的數(shù)據(jù)卷進行備份,然后將備份文件保存起來.

在有需要的時候,再將備份文件恢復為原來的數(shù)據(jù)卷,并且數(shù)據(jù)卷里面的

內(nèi)容要完整保存.

這里補充一下小知識:

echo "$PWD"

表示:回顯當前目錄

tar cvf /cd5964.tar ./cd564

表示吧./cd564 壓縮成?cd5964.tar

21.備份原理

這樣做:

加載源數(shù)據(jù)卷容器里面的數(shù)據(jù)卷,并在新的容器中把加載過來的數(shù)據(jù)卷

歸檔存放,在進行以上操作的同時,將當前目錄掛載到系容器存放歸檔

文件的目錄中,這樣就可以直接在當前的文件取到對應的壓縮文件了.

實例:

先創(chuàng)建一個數(shù)據(jù)卷容器

docker run -ti -v /hh --name sjj docker.io/ubuntu:14.04

再hh目錄中創(chuàng)建的文檔.

exit

查看一下

getenforce

如果值為?Enforcing

那么就

setenforce 0

再次創(chuàng)建容器卷壓縮包共享到主機目錄$(pwd)中

docker run -ti --volumes-from sjj -v $(pwd):/backup --name sjj1 docker.io/ubuntu:14.04 tar cvf /backup/task11.tar /hh

然后再創(chuàng)建一個新容器把主機目錄$(pwd) 共享到新容器/hf目錄中

docker run -ti -v $(pwd):/hf --name hf docker.io/ubuntu:14.04


恢復原理:

備份了數(shù)據(jù)卷之后,要想實現(xiàn)遷移,還得完成恢復得操作.

恢復得原理是: 首先進入要恢復得壓縮文件所在地,其次創(chuàng)建一個新容器,最后進入容器將歸檔文件壓縮.


22.通過網(wǎng)絡訪問容器
Docker 可以提供網(wǎng)絡服務

Docker 提供網(wǎng)絡服務,主要有兩種方式:

1. 外部訪問
2. 容器互聯(lián)


我們在Docker的容器中,可以運行一些網(wǎng)絡應用,比如WEB應用等,如果這些應用需要

跟外界進行交互,那么一般使用外部訪問容器的方式進行.主要會通過端口映射?的方式解決.

docker run -t -P --expose 95 docker.io/ubuntu:14.04

-t 創(chuàng)建偽終端并綁定到容器的標準輸入上

-P(大寫):表示可以通過外部網(wǎng)絡訪問?
docker ps -l


出現(xiàn) 紅色框中的就算好了.
http://192.168.0.20:32769/?
192.168.0.20? 是 虛擬機的網(wǎng)絡地址:32769端口就會鏈接到 容器中的95端口對應的服務器

還有一種寫法

docker run -t -p 127.0.0.1:22:5000 --name net3 docker.io/ubuntu:14.04


-p (小寫)
上面是針對web 服務


23 通過容器互聯(lián)的方式訪問

除了端口映射的方式之外,如果還想實現(xiàn)跟容器內(nèi)應用

進行通信,還可以使用容器互聯(lián)的方式.

容器互聯(lián)的方式會在接收容器與源容器間創(chuàng)建一個收容器可以看到源容器的指定信息.

容器互聯(lián)通過 --link 參數(shù)
先創(chuàng)建一個容器:

docker run -t --name hl1 docker.io/ubuntu:14.04

然后:
docker run -ti --name hl2 --link hl1:yuan1 docker.io/ubuntu:14.04


新容器互聯(lián)原容器 --link hll 表示連接到hll這個容器上

:yuan1 給原容器起個別名

我們在進行容器互聯(lián)之后,有時我們需要查找某些容器的互聯(lián)信息,此時我們就要

進行連接信息的公開

一般 ,要公開連接信息,有兩種方式:

1. hosts 文件法


2. 環(huán)境變量法

docker run -ti --name hl999 --link hl1:source docker.io/ubuntu:14.04 env


24. 通過容器的id查找容器的名字


docker inspect -f "{{.Name}}" 055b


25. 創(chuàng)建容器時加 --rm 表示 退出容器就刪除此容器
docker run -ti --name h88 --rm docker.io/ubuntu:14.04
26. Dockerfile 使用

創(chuàng)建一個目錄,并創(chuàng)建文件 編輯文件 內(nèi)容就是創(chuàng)建一個鏡像文件

mkdir Dc1

cd Dc1/

vim Dockerfile

內(nèi)容:

FROM docker.io/ubuntu:14.04

MAINTAINER wu

CMD ["echo"]

然后執(zhí)行命令,注意 是目錄Dc1,這是創(chuàng)建一個新鏡像

docker build -t="dnew1:v1" /Dc1

docker images 就可以查看到

27. 創(chuàng)建ssh服務

ssh 是建立在應用層和傳輸層基礎(chǔ)上的安全協(xié)議.

如果我們想在遠程登錄Docker上的某個容器,使用SSH是一種比較安全且方便的方法.

如果要使用SSH進行遠程登錄到Docker容器,那么就要在容器中搭建ssh環(huán)境,并且進行部署.


1. 先創(chuàng)建容器并查看容器是否有ssh服務 沒有就下載更新

?docker run -ti --name sshnew docker.io/ubuntu:14.04

?ps-e | grep ssh

?apt-get update

?apt-get install openssh-server

創(chuàng)建目錄: mkdir /var/run/sshd

啟動ssh服務 /usr/sbin/sshd -D &

ps -e |grep ssh

netstat -aunpt

pa aux

exit?

exit


再打開一個連接口

docker start 76fe

docker attach 76fe

再另一個客戶端

生成密鑰

ssh-keygen -t rsa

注意要密碼

(客戶端也需要ssh服務

客戶端 安裝 ssh服務 yum -y install openssh-server)
在服務器端容器中的 /root創(chuàng)建 .ssh目錄 并創(chuàng)建 authorized_keys

然后把 客戶端id_rsa.pub中的內(nèi)容 拷貝到服務端的

authorized_keys 文件中


客戶端連接

?服務器端ssh 用戶名: IP地址 -p 端口


ssh root@127.0.0.1 -p 8089


也可以 用另一種 方式連接服務端:


先根據(jù)容器的docker inspect 763f 查看內(nèi)部的ip地址


然后ssh root@172.17.0.2

然后輸入密鑰 密碼


就可以連接在一起了


28. docker 下構(gòu)建 lamp linux+apache+mysql+php

下載鏡像

docker pull tutum/lamp

拉取一個鏡像


docker run -d? --name lamp_huanjing -p 8981:80 -p 5306:3306 docker.io/tutum/lamp


curl 127.0.0.1:8981


用瀏覽器 訪問 http://192.168.0.120:8981/ 可以成功

192.168.0.120 這個是我虛擬機的地址





docker build -t="xin:v1" /la

在la目錄下創(chuàng)建Dockerfile寫內(nèi)容

FROM docker.io/tutum/lamp

RUN rm -rf /app &&git clone https://github.com/weisuen/php1.git /app

EXPOSE 80 3306

CMD ["/run.sh"]


刪除掉 /app 然后把自己的 項目放到 /app下 對外端口 80 3306 cmd run.sh

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 虛擬機和Docker的區(qū)別 下面的圖片比較了 Docker 和傳統(tǒng)虛擬化方式的不同之處。傳統(tǒng)虛擬機技術(shù)是虛擬出一套...
    強某某閱讀 351評論 0 0
  • 一,小王對于容器的困惑 小王剛開始學習Docker的時候,找資料在網(wǎng)上看到最多的是Docker的好處。比如: 1、...
    架構(gòu)師小秘圈閱讀 8,655評論 0 24
  • 關(guān)于Docker容器: 1.什么是容器? 容器就是在隔離的環(huán)境運行的一個進程,如果進程停止,容器就會銷毀, 隔離的...
    你好樹洞先生閱讀 240評論 0 1
  • 一、Docker 簡介 Docker 兩個主要部件:Docker: 開源的容器虛擬化平臺Docker Hub: 用...
    R_X閱讀 4,510評論 0 27
  • 現(xiàn)在 水宏大地起來了 連同時間表面的油光一起淹沒 三天前的目光成了往事 一個月前的飽睡就需要追憶 而整個去年已經(jīng)值...
    灰土豆閱讀 1,289評論 3 17

友情鏈接更多精彩內(nèi)容