docker 常用操作

linux 查看系統版本確認使用的docker版本

uname -a --查看Linux內核版本命令
cat /proc/version
Linux localhost.localdomain 3.10.0-693.2.2.el7.x86_64 #1 SMP Tue Sep 12 22:26:13 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

lsb_release -a --查看Linux系統版本的命令
cat /etc/redhat-release,這種方法只適合Redhat系的Linux:

free -- 查看內存
total:總計物理內存的大小。
used:已使用多大。
free:可用有多少。
Shared:多個進程共享的內存總額。
Buffers/cached:磁盤緩存的大小。
第三行(-/+ buffers/cached):
used:已使用多大。
free:可用有多少。
第四行就不多解釋了。
區別:第二行(mem)的used/free與第三行(-/+ buffers/cache) used/free的區別。 這兩個的區別在于使用的角度來看,第一行是從OS的角度來看,因為對于OS,buffers/cached 都是屬于被使用,所以他的可用內存是434884KB,已用內存是3489800KB,
第三行所指的是從應用程序角度來看,對于應用程序來說,buffers/cached 是等于可用的,因為buffer/cached是為了提高文件讀取的性能,當應用程序需在用到內存的時候,buffer/cached會很快地被回收。
所以從應用程序的角度來說,可用內存=系統free memory+buffers+cached。

docker基本概念

Docker: 開源的容器虛擬化平臺,虛擬機能做的Docker都能做,而且速度更快。
    Docker的核心思想有三點:
集裝箱,將一個個程序(應用)看作集裝箱,在網絡間進行搬運,Docker中的集裝箱也就是鏡像
標準化,將程序所需的環境進行標準化
隔離,集裝箱直接互相隔離
    在對Docker有一個大概的認識后再來看Docker的內部:
      Docker 鏡像 - Docker images
      Docker 倉庫 - Docker registeries
      Docker 容器 - Docker containers
鏡像就是一系列的文件,每一層的鏡像都是只讀的,倉庫是用來保存鏡像的,容器的本質是進程,鏡像可以理解為容器的文件系統,一個Docker容包含了所有的某個應用運行所需要的環境。每一個 Docker 容器都是從 Docker 鏡像創建的。

install docker

Install required packages.

$ sudo yum install -y yum-utils
device-mapper-persistent-data
lvm2

$ sudo yum-config-manager
--add-repo
https://download.docker.com/linux/centos/docker-ce.repo

yum list docker-ce --showduplicates | sort -r

yum install docker-ce-17.06.1.ce

systemctl start docker -- 啟動docker
docker run hello-world -- 運行第一個鏡像確認docker 安裝正常
service docker start - docker 啟動
service docker stop - docker 關閉

docker基礎使用

1.docker 鏡像創建
docker pull hub.c.163.com/library/mysql:5.7.18 – 獲取鏡像
docker images - 查看鏡像(鏡像id)
docker tag mysql:latest tmysql:5.7 – 添加鏡像標簽
docker rmi –f images_id – 刪除鏡像 (-f 強制刪除鏡像)

2.docker 容器的創建
docker run --name tmysql -v /home/dly:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d images_id – 創建并啟動容器,同時有掛載配置文件,注意/home/dly權限。
docker run --name ttpostgres -p 5433:5432 -e POSTGRES_PASSWORD=123456 -v /home/dly:/var/lib/postgresql -d postgres:9.6
docker start container – 啟動容器
docker stop container – 關閉容器
docker ps –a - 查看容器
docker exec -it container_id /bin/bash – 進入容器
docker inspect tmysql – 查看容器的元數據

website
3.docker 信息查看

  • history用于確認image的履歷信息. 用于刨根問底確認這個images最近都改了什么非常有效
    docker history image_name

  • info用于確認當前docker的系統信息,包括
    容器相關:個數/狀態
    Server版本號
    Storage driver及詳細信息
    Logging driver格式
    Kernel版本
    OS類型
    當前機器的硬件信息
    docker info

  • port 是為了確認port的mapping狀況,需要container在live的狀態才能確認到port情況
    docker port container_id

  • search default的情況下搜索dockerhub上的鏡像信息
    example: docker search image_name

  • stats 獲取實時的container的資源用量的統計信息, 會不斷自動刷新
    dokcer stats

  • top 列出容器實際的進程詳細信息
    docker top container_id

  • save 將鏡像文件保存為一個archive文件
    docker save busybox >busybox.tar

  • load 是save的反向操作,將save的文件load成為docker管理的鏡像。
    docker load busybox.tar

diff -Inspect changes on a container’s filesystem
exec -Run a command in a running container
export -Export a container’s filesystem as a tar archive
import -Import the contents from a tarball to create a filesystem image
kill -Kill one or more running containers
pause -Pause all processes within one or more containers
rename -Rename a container

3.通過已有的容器創建鏡像 存出和載入
docker ps – 查看備份容器的container_id
docker commit -p container_id container-backup - 使用 docker commit 命令來創建快照,生成一個作為Docker鏡像的容器快照,
docker images – 查看是否生成鏡像
-- # docker tag a25ddfec4d2a arunpyasi/container-backup:test
docker save -o ~/container-backup.tar container-backup - 作為tar包備份。
ls – 查看tar包是否存在。
scp –r ~/ container-backup.tar root@10.2.0.3:/home/dly - 服務器遷移
docker load -i ~/container-backup.tar- 加載該Docker鏡像了。
docker images -查看是否鏡像下載
docker run -d -p 3306:3306 –-name tmysql container-backup - 運行Docker容器。
docker exec –it contain_id /bin/bash –進入容器

  1. 通過已有的數據卷容器的存出和載入
    備份
    docker run –it –v /var/lib/mysql –name tmysql image_id - 創建一個帶有數據卷的容器.

導入數據

docker run --volumes-from container_name -v $(pwd):/backup images_id tar cvf /backup/backup.tar /var/lib/mysql
docker run --volumes-from container_name -v $(pwd):/backup images_id tar cvf /backup/backup.tar /var/lib/postgresql/data

--利用數據卷容器備份,使用 –volumes-from 標記來創建一個加載 data 容器卷的容器,并從主機掛載當前目錄到容器的 /backup 目錄。容器啟動后,在當前目錄下生成的backup.tar 文件就是data容器卷的備份文件.
恢復
docker run --name tmysql -p 3306:3306 -v /home/dly:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d image_id -創建一個帶有空數據卷的容器 這個鏡像自動帶有數據卷,i是打開容器中的stdin,t是為容器分配一個偽終端.這里的d是后臺運行,并打印容器ID容器,容器運行 。
docker run --volumes-from contain_name -v $(pwd):/backup image_id tar xvf /backup/backup.tar
重啟docker

測試環境搭建—postgresql
源文件服務器
apt-get update
apt-get install ssh – 安裝ssh

apt-get install vim-gtk – 安裝vim

su – postgress
pg_dumpall | ssh root@10.0.0.96 'cat > /var/pgbackup/db.out' – 目錄存在
目標文件服務器-- /var/lib/postgresql/data
docker run --name ttpostgres2 -p 5410:5432 -e POSTGRES_PASSWORD=123456 -v /var:/var/lib/postgresql -d postgres_vim:9.6 - 啟動容器掛載
Docker ps
docker exec –it ttpostgres2 /bin/bash –進入容器

Vim var/lib/postgresql.sql i-> Esc ->:wq(保存退出) ,:q!(不保存退出)
su – postgres – 切換超級用戶
cd /var/lib/postgresql - 進入目標路徑
psql -f db.out postgres
Postgresql 數據表導入導出
1.導出
pg_dump -U postgres(用戶名) (-t 表名) 數據庫名(缺省時同用戶名) > 路徑/文件名.sql
postgres@debian:~$ pg_dump -U postgres -t system_calls wangye > ./test.sql
2.導入
$ createdb newdatabase
$ psql -d newdatabase -U postgres -f mydatabase.sql // sql 文件在當前路徑下

$ psql -d databaename(數據庫名) -U username(用戶名) -f < 路徑/文件名.sql // sql 文件不在當前路徑下
$ su postgres #切換到psql用戶下
$ psql -d wangye -U postgres -f system_calls.sql # sql 文件在當前路徑下

DOCKER registry create docker 私用倉庫創建,可以存儲鏡像

docker pull hub.c.163.com/library/registry:latest -- 從公網的鏡像倉庫下載鏡像
docker tag hub.c.163.com/library/registry:latest registry:2.6 -- 重新標記鏡像

docker run -d -p 5000:5000 --restart always -v /home/registry:/tmp/registry --name registry registry:2.6
docker 搭建私有registry
docker server gave HTTP response to HTTPS client 問題處理辦法
解決方案

在/etc/docker下,創建daemon.json文件,寫入:
{"insecure-registries":["172.17.0.2:5000"]}

重啟docker:
systemctl restart docker.service

重新啟動registry: 不需要 --restart=always

或者修改vim /lib/systemd/system/docker.service
編輯內容如下:
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network.target docker.socket
Requires=docker.socket
[Service]
Type=notify
ExecStart=/usr/bin/docker -d $OPTIONS -H fd:// --selinux-enabled=false --graph=/mnt/docker --insecure-registry=10.132.166.67:5000 --registry-mirror=https://xxxx.mirror.aliyuncs.com --cluster-advertise=172.16.120.144:2375 --cluster-store=etcd://127.0.0.1:2379
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity
MountFlags=slave

[Install]
WantedBy=multi-user.target

selinux-enabled是否開啟selinux功能
graph指定docker的工作目錄
insecure-registry指定docker registry的地址
registry-mirror指定docker加速器地址,進入https://dev.aliyun.com申請docker鏡像加速器
cluster-advertise指定docker主機在swarm集群中的位置
cluster-store指定swarm集群存儲,可以使用etcd/consul等
如果不使用swarm集群cluster-advertise和cluster-store可以不用配置

驗證registry是否可用

docker pull hello-world
docker tag 172.17.0.2:5000/hello-world
docker push 172.17.0.2:5000/hello-world
docker rim -f hello-world
docker pull 172.17.0.2:5000/hello-world --從私有倉庫下載鏡像

registry的V2 不可使用docker search,查看私用倉庫鏡像
curl http://172.17.0.2:5000/v2/_catalog
curl http://172.17.0.2:5000/v2/hello-world/tags/list

curl http://10.2.0.16:5000/v2/_catalog

docker開機自啟動容器

使用restart policy:在使用docker run啟動容器時通過--restart標志指定,這個標志有多個value可選,不同的value有不同的行為,如下表所列:
no不自動重啟容器. (默認value)
on-failure 容器發生error而退出(容器退出狀態不為0)重啟容器
unless-stopped 在容器已經stop掉或Docker stoped/restarted的時候才重啟容器
always 在容器已經stop掉或Docker stoped/restarted的時候才重啟容器
要讓docker 的容器自動在開機啟動,docker run 指令中加入 --restart=always 就行。
sudo docker run --restart=always .....
如果創建時未指定 --restart=always ,可通過update 命令設置
docker update --restart=always xxx

docker 設置固定ip

docker容器每當重新啟動時,ip和host都會發生變化,有時安裝的軟件需要綁定Docker局域網中的其他容器,如 MongoDB 副本集部署的時候,就需要綁定其他容器的內網IP。
Docker 默認網絡
Docker安裝后,默認會創建下面三種網絡類型:
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
9781b1f585ae bridge bridge local
1252da701e55 host host local
237ea3d5cfbf none null local
啟動 Docker的時候,用 --network 參數,可以指定網絡類型,如:

bridge:橋接網絡
默認情況下啟動的Docker容器,都是使用 bridge,Docker安裝時創建的橋接網絡,每次Docker容器重啟時,會按照順序獲取對應的IP地址,這個就導致重啟下,Docker的IP地址就變了
none:無指定網絡
使用 --network=none ,docker 容器就不會分配局域網的IP
host: 主機網絡
使用 --network=host,此時,Docker 容器的網絡會附屬在主機上,兩者是互通的。
例如,在容器中運行一個Web服務,監聽8080端口,則主機的8080端口就會自動映射到容器中。
創建自定義網絡:(設置固定IP)
啟動Docker容器的時候,使用默認的網絡是不支持指派固定IP的,如下:

~ docker run -itd --net bridge --ip 172.17.0.10 centos:latest /bin/bash
6eb1f228cf308d1c60db30093c126acbfd0cb21d76cb448c678bab0f1a7c0df6

docker: Error response from daemon: User specified IP address is supported on user defined networks only.
因此,需要創建自定義網絡,下面是具體的步驟:
步驟1: 創建自定義網絡
創建自定義網絡,并且指定網段:172.18.0.0/16

? ~ docker network create --subnet=172.18.0.0/16 mynetwork
? ~ docker network ls
NETWORK ID NAME DRIVER SCOPE
9781b1f585ae bridge bridge local
1252da701e55 host host local
4f11ae9c85de mynetwork bridge local
237ea3d5cfbf none null local
步驟2: 創建Docker容器
代碼如下:
? ~ docker run -itd --name networkTest1 --net mynetwork --ip 172.18.0.2 centos:latest /bin/bash

這個時候,創建的Docker容器就會持有 172.18.0.2 這個IP.

[root@ec8e31938fe7 /]# ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:AC:12:00:02
inet addr:172.18.0.2 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::42:acff:fe12:2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:88 errors:0 dropped:0 overruns:0 frame:0
TX packets:14 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:4056 (3.9 KiB) TX bytes:1068 (1.0 KiB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

git 遠程庫創建

在github.com注冊一個用戶,并創建一個私用倉庫
用戶:lydu

git remote add origin git@github.com:lydu/lydu_rep.git --遠程庫名字origin
git remote -v --view remote

本地倉庫創建,其實就是一個存放的文件夾

mkdir git
cd git &&git init -- 在git 文件夾下出現.git 文件
git add test.txt --- 存入緩存
git status -s --view status 緩存區
git config --global user.name "lydu"
git config --global user.email d2012ly@1
3.com
git commit -m "add file test2.txt"
使用git add指令將文件從工作區添加到stage中;
使用git commit指令將stage中的所有內容提交到當前分支。

Warning: Permanently added 'github.com,192.30.253.113' (RSA) to the list of known hosts.
Permission denied (publickey).
解決方案是github上添加一個公鑰

git pull origin master
git push origin master
git remote show origin

git checkout -- filename --撤銷修改
git reset HEAD README.md #將stage區中的README.md文件撤銷回工作區
git rm test.txt --dele 文件
git commit -m"remove test" #提交刪除

只用一個命令就可以add所有修改的文件:$git add .

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,333評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,491評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,263評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,946評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,708評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,186評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,409評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,939評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,774評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,976評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,641評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,872評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,650評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,958評論 2 373

推薦閱讀更多精彩內容

  • 轉載自 http://blog.opskumu.com/docker.html 一、Docker 簡介 Docke...
    極客圈閱讀 10,520評論 0 120
  • 五、Docker 端口映射 無論如何,這些 ip 是基于本地系統的并且容器的端口非本地主機是訪問不到的。此外,除了...
    R_X閱讀 1,773評論 0 7
  • docker基本概念 1. Image Definition 鏡像 Image 就是一堆只讀層 read-only...
    慢清塵閱讀 8,788評論 1 21
  • 0x01 核心概念 Docker鏡像類似于虛擬機鏡像,可以理解為一個面向Docker引擎的只讀模板,包含了文件系統...
    閑云逸心閱讀 4,750評論 0 9
  • 喜歡你的人一轉身就可以看見,不去珍惜分分鐘就會不見
    不讓我當淑女是吧閱讀 163評論 0 1