• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            zhiye_wang

            向星空仰望的越深,越發(fā)現(xiàn)自己的渺小

              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              31 隨筆 :: 1 文章 :: 2 評(píng)論 :: 0 Trackbacks

            第三章 docker 入門

            3.1 確保docker已經(jīng)就緒

            首先查看docker程序是否存在,功能是否正常

            [#3#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker info

            [sudo] password for cloudsoar:

            Containers: 11

            Images: 16

            Server Version: 1.9.1

            Storage Driver: aufs

             Root Dir: /var/lib/docker/aufs

             Backing Filesystem: extfs

             Dirs: 38


            3.2 運(yùn)行我們的第一個(gè)容器

            docker run 命令提供了Docker容器的創(chuàng)建到啟動(dòng)的功能

            書上使用此命令創(chuàng)建第一個(gè)容器

            [#4#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker run -i -t ubuntu /bin/bash 

             Unable to find image 'ubuntu:latest' locally

            latest: Pulling from library/ubuntu

            073de23ee32b: Downloading 48.09 MB/65.69 MB

            ...

            可以看到有大概66MB,等待慢慢下載完成。其實(shí)Ubuntu鏡像也是一個(gè)基礎(chǔ)鏡像。

            sudo docker run -i -t ubuntu /bin/bash 

            這句命令我的理解就是,sudo 臨時(shí)切換管理員權(quán)限,使用 docker run 命令,啟動(dòng)鏡像

            ubuntu 中的 bash。docker run 會(huì)檢查本地是否有ubuntu這個(gè)基礎(chǔ)鏡像,如果沒有,

            則去docker hub registry 去檢測并下載此鏡像,下載完畢再執(zhí)行。

            由于容器有自己的ip,自己的shell,是獨(dú)立的。因此加上 -i 參數(shù)來打開容器的標(biāo)準(zhǔn)輸入

            STDIN,使用 -t 給容器配一個(gè)交互式終端。當(dāng)新容器下載完畢后,會(huì)自動(dòng)以root用戶登

            錄到新的容器中。界面顯示的是:root@容器ID 。容器的主機(jī)名就是容器的ID。

            假設(shè)說我們想要給這個(gè)容器安裝一個(gè)curl,或者是 ping,可以通過如下命令

            sudo docker run ubuntu apt-get install -y curl

            docker run 容器名 命令 


            等了半個(gè)小時(shí),還沒下載完畢,由于這個(gè)基礎(chǔ)鏡像下載實(shí)在太慢,我換了一個(gè)鏡像

            我之前pull了一個(gè)名為paulcos11/docker-tutorial的鏡像,容器有11個(gè)

            如果你想下載其他的鏡像,可以使用 docker search tutorial 首先查看可用鏡像。然后使用

            docker pull 把它拉下來。

            root@cloudsoar-virtual-machine:/home/cloudsoar# docker search tutorial

            NAME                                 DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED

            georgeyord/reactjs-tutorial          This is the backend of the React comment b...   2                    [OK]

            mhausenblas/kairosdb-tutorial        GitHub fetcher for KairosDB tutorial            1                    [OK]

            odk211/spree-tutorial                                                                1                    [OK]

            paulcos11/docker-tutorial            docker tutorial       


            root@cloudsoar-virtual-machine:/home/cloudsoar# docker pull paulcos11/docker-tutorial

            Using default tag: latest

            latest: Pulling from paulcos11/docker-tutorial

            044ffdf80f70: Pull complete 

            ...

            Digest: sha256:8effcf1f4eac7096ba4eaf4a90261580657605d159946372c12ae28b7e5e74f1

            Status: Downloaded newer image for paulcos11/docker-tutorial:latest

            到這里,我成功下載了容器鏡像paulcos11/docker-tutorial


            繼續(xù)流程,進(jìn)入我們的容器

            root@cloudsoar-virtual-machine:~# docker run -i -t paulcos11/docker-tutorial /bin/bash

            root@537739299f24:/# 

            執(zhí)行完畢可以看到進(jìn)入了容器的bash,用戶是root,容器ID是537739299f24,


            3.3 使用容器

            可以使用 hostname 查看容器的主機(jī)名

            root@537739299f24:/# hostname

            537739299f24

            可以看到容器的ID就是容器的主機(jī)名。
            下一步看看 /etc/hosts 文件

            root@537739299f24:/# cat /etc/hosts

            172.17.0.2 537739299f24

            127.0.0.1 localhost

            ::1 localhost ip6-localhost ip6-loopback

            fe00::0 ip6-localnet

            ff00::0 ip6-mcastprefix

            ff02::1 ip6-allnodes

            ff02::2 ip6-allrouters

            可以看到docker 已經(jīng)在host文件中為該容器的ijp增加了一條主機(jī)配置項(xiàng)

            再看看IP

            root@537739299f24:/# ip a

            1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 

                link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

                inet 127.0.0.1/8 scope host lo

                   valid_lft forever preferred_lft forever

                inet6 ::1/128 scope host 

                   valid_lft forever preferred_lft forever

            30: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 

                link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff

                inet 172.17.0.2/16 scope global eth0

                   valid_lft forever preferred_lft forever

                inet6 fe80::42:acff:fe11:2/64 scope link 

                   valid_lft forever preferred_lft forever

            可以看到這里有l(wèi)o的回環(huán)接口。還有ip是172.17.0.2的標(biāo)準(zhǔn)eth0接口,和宿主機(jī)完全一樣。

            查看容器 中的進(jìn)程

            root@537739299f24:/# ps -aux

            USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

            root          1  0.2  0.1  21944  3528 ?        Ss   03:03   0:01 /bin/bash

            root         12  0.0  0.0  19188  2336 ?        R+   03:14   0:00 ps -aux

            接下來,我想給容器安裝一個(gè)vim

            這里我先更新下容器的源再安裝。

            root@537739299f24:/# apt-get update && apt-get install vim

            安裝完畢使用 exit,即可退出到宿主機(jī)系統(tǒng)。這時(shí)容器也會(huì)停止,因?yàn)橐坏┩顺鋈萜鳎?/span>

            容器也隨之停止了運(yùn)行。但是容器仍然存在,可以用 docker ps -a 查看容器列表。

            root@537739299f24:/# exit

            exit

            docker ps 可以查看運(yùn)行中的容器,加上 -a 參數(shù)可以查看所有的容器

            3.4 容器命名

            可以使用如下命令為容器指定一個(gè)合法有意義的名字。

            root@cloudsoar-virtual-machine:~# docker run --name wzy_the_container -i -t paulcos11/docker-tutorial /bin/bash

            root@0a09dfd688ea:/# exit

            exit


            3.5 重新啟動(dòng)已經(jīng)停止的容器

            此時(shí),wzy_the_container 已經(jīng)停止了。可以使用如下命令重啟一個(gè)已經(jīng)停止的容器。

            root@cloudsoar-virtual-machine:~# docker start wzy_the_container

            wzy_the_container

            也可以使用容器ID替換容器名。


            3.6 附著到容器上
            容器啟動(dòng)的時(shí)候會(huì)按照docker run指定的參數(shù)來運(yùn)行。因此這個(gè)容器啟動(dòng)后會(huì)啟動(dòng)一個(gè)交互

            的shell。我可以使用 docker attach 直接附著到此容器。

            root@cloudsoar-virtual-machine:~# docker attach wzy_the_container

            root@0a09dfd688ea:/# 

            可以看到重新會(huì)到了容器的Bash提示符界面。

            如果退出容器的shell,容器也會(huì)隨之停止運(yùn)行。


            3.7 創(chuàng)建守護(hù)式容器

            除了交互式運(yùn)行的容器,我們也可以創(chuàng)建守護(hù)容器。可以長期的運(yùn)行應(yīng)用程序或者服務(wù)。

            大多時(shí)候需要?jiǎng)?chuàng)建守護(hù)式容器。

            [#10#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker run --name daemon_dave -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"

            cf5636f0499fa0105b845b5dfa61913ff7d5fccfb1b19c16b09ed2752233794d

            由于此時(shí)第 3.2 步我下載的 Ubuntu 基礎(chǔ)鏡像Downloading 48.09 MB/65.69 MB 剛好下載

            完畢,所以此時(shí)我開始使用ubuntu容器鏡像操作了。

            docker run 的參數(shù) -d 是放到后臺(tái)執(zhí)行。此時(shí)我們并沒有像上一個(gè)容器直接附著到新容器的

            shell會(huì)話上,而是返回了一個(gè)容器ID而已。此時(shí)使用 docker ps 可以看到正在運(yùn)行的容器。


            ubuntu就是我剛剛下載完畢的基礎(chǔ)鏡像。 paulcos11/docker-tutorial 是我自己下載的其他的鏡像。

            3.8 容器內(nèi)部再搞什么

            使用 docker logs 獲取容器日志

            [#16#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker logs daemon_dave

            hello world

            hello world

            hello world

            hello world

            hello world

            hello world

            或者可以加上-f 實(shí)時(shí)監(jiān)控容器日志。

            sudo docker logs -f daemon_dave

            也可以追蹤日志某一片段,只需要tail命令加入 -f --lines標(biāo)志即可。

            例如: docker logs --tail 10 daemon_dave 獲取最后10行日志即可。

             docker logs --tail 0 -f daemon_dave 獲取最新日志。

            如果要查看日志的時(shí)間,可以加上時(shí)間戳。

            [#18#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker logs -ft daemon_dave

            2016-03-15T03:45:28.457991514Z hello world

            2016-03-15T03:45:29.472422582Z hello world

            2016-03-15T03:45:30.475130491Z hello world


            3.9 查看容器進(jìn)程

            查看容器內(nèi)的進(jìn)程可以使用 docker top 命令。

            [#20#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker top daemon_dave

            UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD

            root                25381               22325               0                   11:45               ?                   00:00:00            /bin/sh -c while true; do echo hello world; sleep 1; done


            3.10 在容器內(nèi)部運(yùn)行進(jìn)程

            我們可以使用docker exec 命令在容器內(nèi)部額外啟動(dòng)新進(jìn)程,可以運(yùn)行的進(jìn)程有兩種類型,

            交互式任務(wù)和后臺(tái)任務(wù)。首先我們使用 touch 命令創(chuàng)建一個(gè)空文件。

            $sudo docker exec -d daemon_dave touch /etc/new_config_file

            -d 表示是后臺(tái)進(jìn)程。

            或者打開一個(gè)shell

            $sudo docker exec -t -i daemon_dave /bin/bash

            root@cf5636f0499f:/#


            3.11 停止守護(hù)式容器

            $sudo docker stop daemon_dave

            daemon_dave


            3.12 自動(dòng)重啟容器

            如果由于某種錯(cuò)誤導(dǎo)致容器停止,可以通過 --restart 標(biāo)志讓docker自動(dòng)重新啟動(dòng)容器。

            $sudo docker run --restart=on-failure:5 --name daemon_dave -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"

            Error response from daemon: Conflict. The name "daemon_dave" is already in use by container cf5636f0499f. You have to remove (or rename) that container to be able to reuse that name.

            這里我的運(yùn)行不起來,因?yàn)?-- restart 標(biāo)示是docker 2.0 引入的。我的是docker 1.9版本。


            3.13 深入容器

            除了使用docker ps 查看容器信息,還可以使用 docker inspect 查看更多信息


            $sudo docker inspect daemon_dave

            [sudo] password for cloudsoar:

            [

            {

                "Id": "cf5636f0499fa0105b845b5dfa61913ff7d5fccfb1b19c16b09ed2752233794d",

                "Created": "2016-03-15T03:45:28.124542139Z",

                "Path": "/bin/sh",

                "Args": [

                    "-c",

                    "while true; do echo hello world; sleep 1; done"

                ],

                "State": {

                    "Status": "exited",

                    "Running": false,

                    "Paused": false,

                    "Restarting": false,

                    "OOMKilled": false,

                    "Dead": false,

                    "Pid": 0,

                    "ExitCode": 137,

                    "Error": "",

                    "StartedAt": "2016-03-15T03:45:28.455126857Z",

                    "FinishedAt": "2016-03-15T04:05:11.945521026Z"

                },

               ...

            也可使用 -f 或者 --format 標(biāo)志來選定查看結(jié)果。

            $sudo docker inspect --format='{{ .State.Running}}' daemon_dave

            false

            以及查看其他信息

            $sudo docker start daemon_dave

            daemon_dave

            $sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' daemon_dave

            172.17.0.3


            3.14 刪除容器

            如果容器不在使用,可以使用 docker rm 命令刪除。

            這里假設(shè)我要?jiǎng)h除 daemon_dave 這個(gè)容器,他的容器ID是 cf5636f0499f

            $sudo docker rm cf5636f0499f

            Error response from daemon: Conflict, You cannot remove a running container. Stop the container before attempting removal or use -f

            Error: failed to remove containers: [cf5636f0499f]

            $sudo docker stop cf5636f0499f

            cf5636f0499f

            $sudo docker rm cf5636f0499f

            cf5636f0499f

            由于不能刪除正在運(yùn)行的容器,所以需要先停止。


            3.15 小結(jié)

            下一章學(xué)習(xí)如何構(gòu)建自己的Docker鏡像,以及如何使用Docker 倉庫和 Docker Registry.

            posted on 2016-03-15 13:43 zhiye_wang 閱讀(714) 評(píng)論(0)  編輯 收藏 引用 所屬分類: docker
            久久人妻少妇嫩草AV蜜桃| 热综合一本伊人久久精品| 久久久亚洲欧洲日产国码是AV| 久久久黄色大片| www.久久热.com| 欧美粉嫩小泬久久久久久久| 久久久久久亚洲Av无码精品专口| 亚洲国产精品久久久久婷婷软件| 亚洲七七久久精品中文国产 | 亚洲国产精品久久久久婷婷老年| 国产一区二区精品久久岳| 久久91精品国产91久久户| 国产精品欧美久久久天天影视 | 久久精品99久久香蕉国产色戒| 久久国产乱子伦精品免费强| 蜜桃麻豆WWW久久囤产精品| 亚洲精品成人久久久| 国产精品一久久香蕉国产线看| 一本色道久久88综合日韩精品 | 欧美久久久久久| 久久99热狠狠色精品一区| 亚洲色婷婷综合久久| 中文字幕精品久久| 久久综合九色综合久99| 人妻少妇久久中文字幕| 久久精品人人做人人爽97 | 国产精品VIDEOSSEX久久发布| 国产精品久久久久久久久鸭| 色狠狠久久综合网| 一本色道久久88综合日韩精品 | 久久精品无码一区二区三区| 无码久久精品国产亚洲Av影片 | 久久久久久伊人高潮影院| 日韩中文久久| 久久一区二区三区免费| 中文精品久久久久国产网址| 99久久精品国产综合一区| 国产精品va久久久久久久| 狠狠综合久久综合中文88| 久久综合日本熟妇| 热久久最新网站获取|