記錄時間:?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 這個是我虛擬機的地址
