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_nameinfo用于確認當前docker的系統信息,包括
容器相關:個數/狀態
Server版本號
Storage driver及詳細信息
Logging driver格式
Kernel版本
OS類型
當前機器的硬件信息
docker infoport 是為了確認port的mapping狀況,需要container在live的狀態才能確認到port情況
docker port container_idsearch default的情況下搜索dockerhub上的鏡像信息
example: docker search image_namestats 獲取實時的container的資源用量的統計信息, 會不斷自動刷新
dokcer statstop 列出容器實際的進程詳細信息
docker top container_idsave 將鏡像文件保存為一個archive文件
docker save busybox >busybox.tarload 是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 –進入容器
- 通過已有的數據卷容器的存出和載入
備份
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 .