Docker容器(分享十五)

        自從加入公司雲計算部門,接觸的新技術愈來愈多了,並且客戶需求也原來越多樣性,作我一名老IT,也必須跟上節奏,接下來一段時間我先嚐試去了解docker基本功能,而後深刻去挖掘。python

         1、什麼是docker?mysql

        Docker 是一個開源的應用容器引擎,讓開發者能夠打包他們的應用以及依賴包到一個可移植的容器中,而後發佈到任何流行的 Linux 機器上,也能夠實現虛擬化。容器是徹底使用沙箱機制,相互之間不會有任何接口。linux

一個完整的Docker有如下幾個部分組成: web

  1. dockerClient客戶端sql

  2. Docker Daemon守護進程docker

  3. Docker Image鏡像ubuntu

  4. 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的過程當中,每每須要能查看容器內應用產生的數據,或者須要把容器內的數據進行相應的備份,甚至想把多個容器之間進行數據的共享,這必然涉及容器的數據管理操做。容器中管理數據主要有兩種方式:

  • 數據卷(Data Volumes)
  • 數據卷容器(Data Volume Containers)
在容器內建立一個數據卷

docker run -it --rm --name web -v /src/webapp:/opt/webapp training/webapp python app.py #將宿主機中的/src/webapp目錄掛載到容器中的/opt/webapp中

數據容器
  • 首先,建立一個數據卷容器dbdata,並在其中建立一個數據卷掛載到/dbdata
docker run --name jpzhu_centos -v /jpzhu_file --rm -it centos /bin/bash #建立一個數據容器而且掛載其中/jpzhu_file文件做爲其它容器共享的數據卷
  • 接着,能夠在其它的容器中使用–volumes-from 來掛載dbdata中的/jpzhu_file
利用數據卷容器遷移數據

備份

$ 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
相關文章
相關標籤/搜索