URLOS應用開發學前班—docker容器使用篇

Docker簡介

Docker 是一個開源的應用容器引擎,基於Go語言並聽從Apache2.0協議開源。html

Docker 可讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,而後發佈到任何流行的 Linux 機器上,也能夠實現虛擬化。nginx

容器是徹底使用沙箱機制,相互之間不會有任何接口(相似 iPhone 的 app),更重要的是容器性能開銷極低。web

Ubuntu Docker 安裝

一、Docker官方安裝方法

Docker 要求 Ubuntu 系統的內核版本高於 3.10 ,查看本頁面的前提條件來驗證你的 Ubuntu 版本是否支持 Docker。docker

獲取安裝包shell

root@ubuntu:~# wget -qO- https://get.docker.com/ | sh

安裝完成後有提示ubuntu

If you would like to use Docker as a non-root user, you should now consider
    adding your user to the "docker" group with something like:

    sudo usermod -aG docker runoob
   Remember that you will have to log out and back in for this to take effect!

啓動docker服務數組

root@ubuntu:~# sudo service docker start

二、經過安裝URLOS得到

URLOS基於Docker運行,安裝了URLOS,就等於安裝了Docker,咱們可使用URLOS官方安裝命令:瀏覽器

curl -LO www.urlos.com/iu && sh iu

bash

curl -O https://www.urlos.com/install && chmod 544 install && ./install

Docker容器使用

Docker客戶端

Docker 客戶端很是簡單 ,能夠直接輸入 Docker 命令來查看到 Docker 客戶端的全部命令選項。app

root@ubuntu:~# docker

能夠經過命令docker command --help更深刻的瞭解指定的 Docker 命令使用方法。

例如咱們要查看docker stats指令的具體使用方法:

root@ubuntu:~# docker stats --help


啓動容器(交互模式)

咱們若是要使用版本爲16.04的ubuntu系統鏡像來運行容器時,命令以下:

root@ubuntu:~# docker run -it ubuntu:16.04 sh
#

若是要使用版本爲15.04的ubuntu系統鏡像,則命令以下:

root@ubuntu:~# docker run -it ubuntu:15.04 sh
#

各個參數解析:

  • docker: Docker 的二進制執行文件。
  • **run:**與前面的 docker 組合來運行一個容器。
  • **-it:實際上是兩個參數組成, -i 和 -t,-i:容許你對容器內的標準輸入 (STDIN) 進行交互。-t:**在新容器內指定一個僞終端或終端。
  • ubuntu:15.04:指定要運行的鏡像,Docker首先從本地主機上查找鏡像是否存在,若是不存在,Docker 就會從鏡像倉庫 Docker Hub 下載公共鏡像。
  • **sh:**執行命令。

將上面的命令稍做修改,在結尾處加上一句命令,執行後:

root@ubuntu:~# docker run -it ubuntu:16.04 sh -c "while true; do echo hello urlos; sleep 1; done"
hello urlos
hello urlos
hello urlos
hello urlos
hello urlos
hello urlos
^Croot@ubuntu:~#

咱們能夠看到終端上不斷輸出 hello urlos ,這時按鍵盤Ctrl+c來終止輸出。

啓動容器(後臺模式)

咱們將上面的命令再稍做修改,把 -it 替換爲 -d 看看結果:

root@ubuntu:~# docker run -d ubuntu:16.04 sh -c "while true; do echo hello urlos; sleep 1; done"
0cf141fd0745fb4dc104bec1a3238a1bd8dad7aa72926dea0a39ddc7ba54fe32

在輸出中,咱們沒有看到指望的"hello world",而是一串長字符

0cf141fd0745fb4dc104bec1a3238a1bd8dad7aa72926dea0a39ddc7ba54fe32

這個長字符串叫作容器ID,對每一個容器來講都是惟一的,咱們能夠經過容器ID來查看對應的容器發生了什麼。

首先,咱們須要確認容器有在運行,能夠經過 docker ps 來查看:

root@ubuntu:~# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                     NAMES
0cf141fd0745        ubuntu:16.04        "sh -c 'while true; …"   2 minutes ago       Up 2 minutes                                  hopeful_matsumoto

而後使用 docker logs [ID或者名字]命令,查看容器內的標準輸出:

root@ubuntu:~# docker logs hopeful_matsumoto
hello urlos
hello urlos
hello urlos
hello urlos
hello urlos
hello urlos
hello urlos
hello urlos

咱們能夠看到,在容器內部已經輸出了很是多的hello urlos,這說明容器處於後臺運行模式。


運行一個WEB應用容器

如今咱們將在docker容器中運行一個 nginx 應用來運行一個web應用。

首先從Docker Hub公共鏡像源中拉取鏡像:

root@ubuntu:~# docker pull nginx

而後運行這個鏡像:

root@ubuntu:~# docker run -d -p 8080:80 nginx

參數說明:

  • **-d:**讓容器在後臺運行。
  • **-p:**讓宿主機的8080端口映射給容器內部的80端口。

查看WEB應用容器

使用 docker ps 來查看咱們正在運行的容器:

root@ubuntu:~# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
b394756b6c5d        nginx               "nginx -g 'daemon of…"   3 seconds ago       Up 2 seconds        0.0.0.0:8080->80/tcp                elastic_babbage

咱們看到端口信息 0.0.0.0:8080->80/tcp,意思是宿主機的8080端口映射給容器內部的80端口。

這時咱們能夠經過瀏覽器訪問WEB應用:


查看端口的快捷方法

經過docker ps命令能夠查看到容器的端口映射,docker還提供了另外一個快捷方式 docker port,使用 docker port 能夠查看指定 (ID 或者名字)容器的某個肯定端口映射到宿主機的端口號。

上面咱們建立的 web 應用容器 ID 爲 b394756b6c5d 容器名爲 elastic_babbage

我可使用 docker port b394756b6c5ddocker port elastic_babbage 來查看容器端口的映射狀況。

root@ubuntu:~# docker port b394756b6c5d
80/tcp -> 0.0.0.0:8080
root@ubuntu:~# docker port affectionate_montalcini
80/tcp -> 0.0.0.0:8080

查看 WEB 應用程序日誌

使用docker logs [ID或者名字] 能夠查看容器內部的標準輸出。

root@ubuntu:~# docker logs b394756b6c5d
192.168.43.131 - - [04/Jun/2019:06:28:42 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0" "-"
2019/06/05 06:28:42 [error] 6#6: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 192.168.43.131, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "192.168.43.122:8080"
192.168.43.131 - - [04/Jun/2019:06:28:42 +0000] "GET /favicon.ico HTTP/1.1" 404 153 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0" "-"

查看WEB應用程序容器的進程

咱們還可使用 docker top 來查看容器內部運行的進程

root@ubuntu:~# docker top b394756b6c5d
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                2069                2050                0                   23:24               ?                   00:00:00            nginx: master process nginx -g daemon off;
systemd+            2100                2069                0                   23:24               ?                   00:00:00            nginx: worker process

中止 WEB 應用容器

使用 docker stop [ID或者名字] 命令中止容器

root@ubuntu:~# docker stop b394756b6c5d
b394756b6c5d

啓動 WEB 應用容器

使用 docker start [ID或者名字] 命令啓動已經中止的容器

root@ubuntu:~# docker start b394756b6c5d
b394756b6c5d

### 從新啓動WEB應用容器

咱們能還可使用 docker restart [ID或者名字] 命令從新啓動正在運行的容器

root@ubuntu:~# docker restart b394756b6c5d
b394756b6c5d

docker ps -l 查詢最後一次建立的容器:

root@ubuntu:~# docker ps -l
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
b394756b6c5d        nginx               "nginx -g 'daemon of…"   12 minutes ago      Up 12 minutes       0.0.0.0:8080->80/tcp   elastic_babbage

刪除WEB應用容器

咱們可使用 docker rm [ID或者名字] 命令來刪除不須要的容器

注意:刪除容器時,容器必須是中止狀態,不然會報以下錯誤:

root@ubuntu:~# docker rm b394756b6c5d
Error response from daemon: You cannot remove a running container b394756b6c5d95f1d43f11393c169cc73de40938d8f09db81077c8bce6e5881a. Stop the container before attempting removal or force remove

若是要刪除正在運行的容器,這時咱們只須要加入 -f 參數便可:

root@ubuntu:~# docker rm -f b394756b6c5d
b394756b6c5d
相關文章
相關標籤/搜索