自從加入公司雲計算部門,接觸的新技術愈來愈多了,並且客戶需求也原來越多樣性,作我一名老IT,也必須跟上節奏,接下來一段時間我先嚐試去了解docker基本功能,而後深刻去挖掘。python
1、什麼是docker?mysql
Docker 是一個開源的應用容器引擎,讓開發者能夠打包他們的應用以及依賴包到一個可移植的容器中,而後發佈到任何流行的 Linux 機器上,也能夠實現虛擬化。容器是徹底使用沙箱機制,相互之間不會有任何接口。linux
一個完整的Docker有如下幾個部分組成: web
dockerClient客戶端sql
Docker Daemon守護進程docker
Docker Image鏡像ubuntu
DockerContainer容器centos
2、如何安裝dockerbash
docker支持在主流的操做系統平臺上使用,包含Ubuntu、Centos、Windows以及MacOS系統等。固然在linux系統平臺上是原生支持,使用體驗是最好的。本分享中就以centos爲例進行安裝app
docker支持centos6以及後面的版本
$yum install –y docker
3、鏡像
1.獲取鏡像
docker pull NAME[:TAG] 好比:docker pull Ubuntu
2.查看鏡像信息
[root@localhost ~]# docker images;
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/ubuntu latest 00fd29ccc6f1 32 hours ago 110.5 MB
[root@localhost ~]# docker inspect 00fd29ccc6f1
[
{
"Id": "sha256:00fd29ccc6f167fa991580690a00e844664cb2381c74cd14d539e36ca014f043",
"RepoTags": [
"docker.io/ubuntu:latest"
3.搜索鏡像(搜索遠端倉庫中共享的鏡像,默認搜索docker HUB官方倉庫中的鏡像)
docker search mysql
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/mysql MySQL is a widely used, open-source relati... 5412 [OK]
docker.io docker.io/mariadb MariaDB is a community-developed fork of M... 1676 [OK]
docker.io docker.io/mysql/mysql-server Optimized MySQL Server Docker images. Crea... 373 [OK]
docker.io docker.io/percona Percona Server is a fork of the MySQL rela... 309 [OK]
docker.io docker.io/hypriot/rpi-mysql RPi-compatible Docker Image with Mysql 74
docker.io docker.io/zabbix/zabbix-server-mysql Zabbix Server with MySQL database support 66 [OK]
docker.io docker.io/centurylink/mysql Image containing
4.刪除鏡像
docker rmi image(image能夠爲標籤或者ID)
docker rmi Ubuntu:latest
dicker rmi –f ubuntu 強行刪除,不建議這樣操做
通常建議先刪除依賴該鏡像的全部容器,再來刪除鏡像。
docker ps -a查看本機上存在的容器。
5.建立鏡像
基於已有的鏡像的容器建立:
[root@localhost ~]# docker run -ti ubuntu /bin/bash
touch test
exit
docker commit –m 「Added a new file」 –a 「docker Newbee」 8bd2274ada22 test 9ecdbadc
基於本地模板導入
cat ubuntu –14.04-x86_64-minimal.tar.gz |docker import – ubuntu:14.04
6.存出和載入鏡像
存出鏡像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/ubuntu latest 00fd29ccc6f1 2 days ago 110.5 MB
docker.io/httpd latest 7239615c0645 5 days ago 177.3 MB
docker.io/mysql latest 7d83a47ab2d2 5 days ago
[root@localhost ~]# docker save -o ubuntu_test.tar ubuntu
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/ubuntu latest 00fd29ccc6f1 2 days ago 110.5 MB
docker.io/httpd latest 7239615c0645 5 days ago 177.3 MB
docker.io/mysql latest 7d83a47ab2d2 5 days ago 408.2 MB
[root@localhost ~]# ls
anaconda-ks.cfg ubuntu_test.tar
載入鏡像
docker load < ubuntu_test.tar
4、容器
簡單地說,容器是鏡像的一個運行實例,所不一樣的是,它帶有額外的可寫文件層。
建立容器:
新建容器:
[root@localhost ~]# docker create -it ubuntu:latest
743f20816538a52a686cf61d6a30db6fdb609c0da2d6a844e645b334b9bb3252
docker start
新建並啓動容器
docker run ubuntu /bin/echo 「Hello world’
docker ps
: 查看當前運行的容器
docker ps -a
:查看全部容器,包括中止的
docker ps -l
:查看最新建立的容器,只列出最後建立的。
docker ps -n=2
:-n=x選項,會列出最後建立的x個容器。
容器名:docker start docker_run
,或者ID:docker start 43e3fef2266c
。
–restart(自動重啓):默認狀況下容器是不重啓的,–restart標誌會檢查容器的退出碼來決定容器是否重啓容器。
docker run --restart=always --name docker_restart -d centos /bin/sh -c "while true;do echo hello world; sleep;done"
:
--restart=always
:無論容器的返回碼是什麼,都會重啓容器。
--restart=on-failure:5
:當容器的返回值是非0時纔會重啓容器。5是可選的重啓次數
容器終止
docker stop [NAME]/[CONTAINER ID]
:將容器退出。
docker kill [NAME]/[CONTAINER ID]
:強制中止一個容器。
刪除容器
docker rm [NAME]/[CONTAINER ID]
容器終止後,在須要的時候能夠從新啓動,肯定不須要了,能夠進行刪除操做。
導入和導出容器
[root@localhost ~]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dd7eef06ccba ubuntu "/bin/echo 「Hello w" 12 minutes ago Exited (0) 4 minutes ago silly_meitner
[root@localhost ~]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dd7eef06ccba ubuntu "/bin/echo 「Hello w" 12 minutes ago Exited (0) 4 minutes ago silly_meitner
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dd7eef06ccba ubuntu "/bin/echo 「Hello w" 14 minutes ago Exited (0) 7 minutes ago silly_meitner
743f20816538 ubuntu:latest "/bin/bash" 17 minutes ago Created nostalgic_stonebraker
8bd2274ada22 ubuntu "/bin/bash" 31 minutes ago Exited (0) 31 minutes ago sad_mccarthy
7786523990bf ubuntu "/bin/bash" 30 hours ago Exited (0) 30 hours ago awesome_goldstine
175c8cf0149e ubuntu "echo 'hello! I am he" 30 hours ago Exited (0) 30 hours ago fervent_kowalevski
[root@localhost ~]# docker export dd7eef06ccba > test.tar
cat test.tar |docker import –test/ubuntu
5、倉庫
docker 官方維護了一個公共倉庫 http://hub.docker.com ,大約15000多個鏡像
6、數據管理
用戶在使用docker的過程當中,每每須要能查看容器內應用產生的數據,或者須要把容器內的數據進行相應的備份,甚至想把多個容器之間進行數據的共享,這必然涉及容器的數據管理操做。容器中管理數據主要有兩種方式:
docker run -it --rm --name web -v /src/webapp:/opt/webapp training/webapp python app.py #將宿主機中的/src/webapp目錄掛載到容器中的/opt/webapp中
備份
$ docker run --name worker -v ${pwd}:/backup --volumes-from dbdata -d centos tar cvf /backup/backup.tar /dbdata恢復
docker run –volumes –from dbdata2 –v(pwd):/backup busybox tar xvf /backup/backuptar