Docker簡記

docker介紹

Docker是一個應(yīng)用容器引擎匀伏,完全使用沙箱機制相互之間不會有任何接口昂拂。它只是一種虛擬化技術(shù)并不是虛擬機碟绑,其實現(xiàn)原理和虛擬機沒有一毛關(guān)系单默。
大部分人對docker和虛擬機區(qū)別的理解是下面這張圖


docker VS 虛擬機

如圖碘举,虛擬機的Hypervisor層會對硬件資源進(jìn)行虛擬化,然后在這之上再安裝獨立的系統(tǒng)搁廓。而docker直接使用硬件資源引颈,每個docker容器使用的也是宿主機的系統(tǒng)內(nèi)核,所以docker相比虛擬機更輕量枚抵,速度更快线欲。這個理解是對的,但是這里容易有個誤區(qū)汽摹。按照圖片中的理解李丰,你是不是認(rèn)為docker安裝在了宿主機上,而docker容器運行在了docker引擎里逼泣?
docker容器本質(zhì)上是宿主機的進(jìn)程趴泌,Docker通過namespace實現(xiàn)了資源隔離,通過cgroups實現(xiàn)了資源限制拉庶。docker容器并不是安裝在docker引擎里嗜憔。docker引擎只是在宿主機上為每個docker容器開辟了一個獨立的進(jìn)程。不是docker實現(xiàn)的這一切氏仗,它也是利用的Linux內(nèi)核的輕量級虛擬化(容器)服務(wù)吉捶。
首先介紹的是Linux內(nèi)核的namespace技術(shù)。在同一個 namespace 下的進(jìn)程可以感知彼此的變化,而對外界的進(jìn)程一無所知呐舔。這樣就可以讓容器中的進(jìn)程產(chǎn)生錯覺币励,認(rèn)為自己置身于一個獨立的系統(tǒng)中,從而達(dá)到隔離的目的珊拼。具體的實現(xiàn)方式是把一個或多個進(jìn)程的相關(guān)資源指定在同一個 namespace 中食呻。

docker 安裝

  • 安裝工具:yum install -y yum-utils
  • 設(shè)置 yum 倉庫:yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    sudo sed -i 's+https://download.docker.com+https://mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
    yum makecache fast
  • 下載docker:yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
  • 啟動docker:systemctl start docker
  • 開機自啟動docker:systemctl enable docker
  • 查看docker信息:docker info
  • 配置docker鏡像加速,方便從github拉取鏡像
    vim /etc/docker/daemon.json
   "registry-mirrors": [
       "https://mirror.ccs.tencentyun.com"
  ]
}

systemctl restart docker

  • 安裝portainer澎现,portainer是一款容器管理可視化界面仅胞,方便對容器進(jìn)行管理。
    docker pull portainer/portainer
    docker run -d -p 9000:9000 --restart=always -v /root/portainer:/data -v /var/run/docker.sock:/var/run/docker.sock --name portainer portainer/portainer

  • SSL證書加密遠(yuǎn)程鏈接
    創(chuàng)建證書腳本docker_cert.sh
    注意:變量的等號左右不能有空格剑辫。字符串可以不加引號干旧,但是如果字符串中有空格必須加單引號或者雙引號

#!/bin/sh
ip=公網(wǎng)ip
password=密碼
dir=/root/docker/cert

if [ ! -d "$dir" ];then
echo ""
echo "$dir , not dir , will create"
echo ""
mkdir -p $dir
else
echo ""
echo "$dir , dir exist , will delete and create"
echo ""
rm -rf $dir
mkdir -p $dir
fi
 
cd $dir
# 創(chuàng)建根證書RSA私鑰
openssl genrsa -aes256 -passout pass:$password  -out ca-key.pem 4096
# 創(chuàng)建CA證書
openssl req -new -x509 -days 365 -key ca-key.pem -passin pass:$password -sha256 -out ca.pem -subj "/C=CN/ST=BeiJing/L=BeiJing/O=yao/CN=$ip"
# 創(chuàng)建服務(wù)端私鑰
openssl genrsa -out server-key.pem 4096
# 創(chuàng)建服務(wù)端簽名請求證書文件
openssl req -subj "/CN=$ip" -sha256 -new -key server-key.pem -out server.csr
echo subjectAltName = IP:$ip,IP:0.0.0.0 >> extfile.cnf
echo extendedKeyUsage = serverAuth >> extfile.cnf
# 創(chuàng)建簽名生效的服務(wù)端證書文件 
openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -passin "pass:$password" -CAcreateserial -out server-cert.pem -extfile extfile.cnf
# 創(chuàng)建客戶端私鑰
openssl genrsa -out key.pem 4096
# 創(chuàng)建客戶端簽名請求證書文件
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
echo extendedKeyUsage = clientAuth >> extfile.cnf
echo extendedKeyUsage = clientAuth > extfile-client.cnf
# 創(chuàng)建簽名生效的客戶端證書文件
openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -passin "pass:$password" -CAcreateserial -out cert.pem -extfile extfile-client.cnf
# 刪除多余文件
rm -f -v client.csr server.csr extfile.cnf extfile-client.cnf
# 修改證書為只讀權(quán)限保證證書安全
chmod -v 0400 ca-key.pem key.pem server-key.pem
chmod -v 0444 ca.pem server-cert.pem cert.pem

編輯docker.service配置文件:
vim /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/root/docker/cert/ca.pem --tlscert=/root/docker/cert/server-cert.pem --tlskey=/root/docker/cert/server-key.pem -H fd:// -H tcp://0.0.0.0:2376
重啟:systemctl daemon-reload && systemctl restart docker

docker 常用命令

  • 導(dǎo)出鏡像(優(yōu)先使用這種方式)
    提交:docker commit <容器id> nginx:1.0.0
    導(dǎo)出:docker save -o nginx.tar nginx:1.0.0
    導(dǎo)入:docker load -i nginx.tar
    重命名鏡像:docker tag [鏡像id] [新鏡像名稱]:[新鏡像標(biāo)簽]

  • 導(dǎo)出容器
    導(dǎo)出:docker export -o postgres.tar postgres
    導(dǎo)入:docker import postgres.tar postgres:latest

  • 日志
    docker logs -f --tail 10 efb78392fcc6

  • 查看鏡像列表
    docker images

  • 查看正運行的容器
    docker ps

  • 查看所有容器
    docker ps -a

  • 刪除鏡像
    docker rmi -f 鏡像ID

  • 刪除容器
    docker rm -f 容器ID

  • 啟動容器
    docker start 容器ID

  • 停止容器
    docker stop 容器ID

  • 重啟容器
    docker restart 容器ID

  • 進(jìn)入容器
    docker attach 容器ID
    attach直接進(jìn)入容器啟動命令的終端,不會啟動新的進(jìn)程揭斧。當(dāng)多個窗口同時使用該命令進(jìn)入該容器時莱革,所有的窗口都會同步顯示。如果有一個窗口阻塞了讹开,那么其他窗口也無法再進(jìn)行操作盅视。
    docker exec -it 容器ID /bin/bash
    exec在容器中打開新的終端,啟動新的進(jìn)程旦万。/bin/bash如果不管用使用/bin/sh闹击。

常見問題

1、以非root用戶身份成艘,運行Docker容器應(yīng)用

容器的root用戶映射到宿主機也是root用戶赏半,所以容器應(yīng)用進(jìn)程具有很高的權(quán)限,甚至可以對宿主機系統(tǒng)進(jìn)行修改淆两。為了降低潛在的安全風(fēng)險断箫,可以在非root用戶下執(zhí)行Docker。非root用戶執(zhí)行docker命令有一些限制秋冰,這時候后可以使用sudo仲义。

2、容器掛載目錄的權(quán)限問題

如果執(zhí)行docker run命令的時候使用的并不是root用戶剑勾。主機上的目錄的權(quán)限與容器內(nèi)的進(jìn)程權(quán)限不匹配埃撵,可能導(dǎo)致無法訪問或無法寫入掛載的目錄。這時候我們將宿主機的掛載目錄權(quán)限設(shè)置為最高就可以虽另。
chmod -R 777 {宿主機掛載目錄}

常用軟件命令

  • mysql
    docker run -p 3306:3306 --name mysql --privileged=true --restart=always -v /data/mysql/conf:/etc/mysql/conf.d -v /data/mysql/data:/var/lib/mysql -v /data/mysql/log:/logs -e MYSQL_ROOT_PASSWORD=123456 -e TZ=Asia/Shanghai -d mysql:latest --lower_case_table_names=1
  • postgres
    docker run --name postgres --restart=always -v /data/postgre/FaceService:/opt/FaceService -v /data/postgre/postgreData:/var/lib/postgresql/data -v /etc/localtime:/etc/localtime:ro -e POSTGRES_PASSWORD=123456 -p 5432:5432 -d postgres:12.11
  • redis (需要自己下載redis.conf文件放進(jìn)去)
    docker run -d --restart=always --name=redis -p 6379:6379 -v /data/redis/redis.conf:/etc/redis/redis.conf -v /data/redis/data:/data redis:latest redis-server /etc/redis/redis.conf --appendonly yes
  • tomcat
    docker run -d -p 8090:8080 --name tomcat --restart=always -v /data/tomcat/webapps:/usr/local/tomcat/webapps tomcat:8.5
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末暂刘,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子捂刺,更是在濱河造成了極大的恐慌谣拣,老刑警劉巖募寨,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異森缠,居然都是意外死亡绪商,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門辅鲸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人腹殿,你說我怎么就攤上這事独悴。” “怎么了锣尉?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵刻炒,是天一觀的道長。 經(jīng)常有香客問我自沧,道長坟奥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任拇厢,我火速辦了婚禮爱谁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘孝偎。我一直安慰自己访敌,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布衣盾。 她就那樣靜靜地躺著寺旺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪势决。 梳的紋絲不亂的頭發(fā)上阻塑,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機與錄音果复,去河邊找鬼陈莽。 笑死,一個胖子當(dāng)著我的面吹牛据悔,可吹牛的內(nèi)容都是我干的传透。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼极颓,長吁一口氣:“原來是場噩夢啊……” “哼朱盐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起菠隆,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤兵琳,失蹤者是張志新(化名)和其女友劉穎狂秘,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體躯肌,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡者春,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了清女。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钱烟。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖嫡丙,靈堂內(nèi)的尸體忽然破棺而出拴袭,到底是詐尸還是另有隱情,我是刑警寧澤曙博,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布拥刻,位于F島的核電站,受9級特大地震影響父泳,放射性物質(zhì)發(fā)生泄漏般哼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一惠窄、第九天 我趴在偏房一處隱蔽的房頂上張望蒸眠。 院中可真熱鬧,春花似錦睬捶、人聲如沸黔宛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽臀晃。三九已至,卻和暖如春介劫,著一層夾襖步出監(jiān)牢的瞬間徽惋,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工座韵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留险绘,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓誉碴,卻偏偏與公主長得像宦棺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子黔帕,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

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