部署Docker

Docker是一個開源的商業軟件產品,有兩個版本:社區版(Community Edition,縮寫爲CE)和企業版(Enterprise Edition,縮寫爲EE)。企業版包含了一些收費服務,個人開發者一般用不到。下面的安裝部署Docker的版本都是針對社區版。Docker的運行環境一般要求64的CPU,Linux內核版本在3.10以上,Linux內核具有cgroups和namespaces功能。
  系統環境說明:
    系統版本:CentOS 7
    內核版本:3.10.0-862.el7.x86_64
    關閉SElinux、Firewalld、Iptables等功能,配置本地yum倉庫

1)下載官方源並安裝

[root@docker ~]# wget https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
--2019-08-31 14:46:54--  https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
Resolving mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)... 101.6.8.193, 2402:f000:1:408:8100::1
Connecting to mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)|101.6.8.193|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2424 (2.4K) [application/octet-stream]
Saving to: ‘docker-ce.repo.1’

100%[====================================================>] 2,424       --.-K/s   in 0s      

2019-08-31 14:46:54 (131 MB/s) - ‘docker-ce.repo.1’ saved [2424/2424]

[root@docker ~]# 
[root@docker ~]# yum install  http://mirror.centos.org/centos/7/extras/x86_64/Packages/container-selinux-2.74-1.el7.noarch.rpm
.....................................
#安裝容器運行所需要的軟件包

[root@docker ~]# yum install  docker-ce
[root@docker ~]# rpm -ql docker-ce
/usr/bin/docker-init
/usr/bin/docker-proxy
/usr/bin/dockerd
/usr/lib/systemd/system/docker.service
/usr/lib/systemd/system/docker.socket
/var/lib/docker-engine/distribution_based_engine-ce.json

2)初始化docker並啓動服務

docker的配置文件爲:/etc/docker/daemon.jjson(此文件需要自己創建)

[root@docker ~]# cd /etc/docker/
[root@docker docker]# touch daemon.json

#配置docker鏡像加速
[root@docker docker]# vim daemon.json 
{
        "registry-mirrors":["https://registry.docker-cn.com"]
}

#驗證docker是否已經安裝成功
[root@docker docker]# docker version
Client: Docker Engine - Community
 Version:           19.03.1
 API version:       1.40
 Go version:        go1.12.5
 Git commit:        74b1e89
 Built:             Thu Jul 25 21:21:07 2019
 OS/Arch:           linux/amd64
 Experimental:      false
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
#或者使用docker info命令查看docker的詳細信息

#啓動docker服務
[root@docker docker]# systemctl start docker.service

3)docker的基礎命令

docker search  image-name    #根據鏡像名稱搜索鏡像
docker pull   image-name     #從倉庫拉取鏡像到本地
docker image ls              #查看本地的所有鏡像;-a查看詳細信息
docker rmi   image-name      #刪除某一個鏡像
docker  tag                  #給一個鏡像打標籤
docker  push                 #推送本地鏡像到遠端倉庫
docker commit                #創建一個新鏡像
docker run                   #運行一個容器
docker start                 #啓動一個容器
docker stop                  #停止一個容器
docker restart               #重啓一個容器
docker rename                #給容器重新命名
docker kill                  #殺死一個正在運行的容器
docker rm                    #刪除一個容器實例
docker inspect               #查看一個容器實例的詳細信息
docker container ls          #查看所有的容器實例,-a可查看詳細信息
docker top                   #查看一個容器內正在運行的進程
docker logs                  #查看一個容器的日誌文件
docker build                 #創建一個Dockerfile文件
docker  port                 #查看一個容器的端口映射狀態
docker stats                 #查看某一個容器運行時的詳細狀態信息

4)創建一個容器實例

#創建一個容器實例之前我們需要先去docker的官方倉庫拉取鏡像來本地,根據本地鏡像來生成容器並運行
#我們先搜索鏡像
[root@docker ~]# docker search httpd 
NAME                                 DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
httpd                                The Apache HTTP Server Project                  2620                [OK]                
centos/httpd                                                                         24                                      [OK]
centos/httpd-24-centos7              Platform for running Apache httpd 2.4 or bui…   22                                      
arm32v7/httpd                        The Apache HTTP Server Project                  8     

#然後我們根據鏡像的名稱開拉取鏡像,注意:如果不在鏡像的後面寫明鏡像的版本,
#docker默認從鏡像倉庫中拉取latest最新版的鏡像
[root@docker ~]# docker pull  httpd
Using default tag: latest
latest: Pulling from library/httpd
1ab2bdfe9778: Pull complete 
174a8e3bca83: Pull complete 
c8e4c9e94892: Pull complete 
4568916ecf2d: Pull complete 
533f5cf513cb: Pull complete 
Digest: sha256:98caed3e3a90ed9db8d25dcbb98eebe0ce56358a9dbbc940d7eb66a8e2b88252
Status: Downloaded newer image for httpd:latest
docker.io/library/httpd:latest
[root@docker ~]# 
[root@docker ~]# docker image ls -a
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
httpd               latest              7d85cc3b2d80        9 days ago          154MB

#給鏡像打標籤
[root@docker ~]# docker tag  httpd:latest  httpd:v0.1
[root@docker ~]# docker image ls -a 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
httpd               latest              7d85cc3b2d80        9 days ago          154MB
httpd               v0.1                7d85cc3b2d80        9 days ago          154MB


#我們有了基礎鏡像後就可以創建運行一個docker實例啦
[root@docker ~]# docker run --name webapp01  -d   httpd:v0.1 
a47fe8335657dde1449fd40e21e51ab2395f63af8bf117cc7cca4adedc03d608
#run --name表示運行一個容器並自定義容器名稱
#-d 代表在後臺運行,最後跟上鏡像的名稱
[root@docker ~]# 
[root@docker ~]# docker  container  ls -a
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS               NAMES
a47fe8335657        httpd:v0.1          "httpd-foreground"   17 seconds ago      Up 11 seconds       80/tcp              webapp01
#此時我們已經有了一個運行httpd服務的容器了,我們可以來查看一下它的信息
[root@docker ~]# docker inspect webapp01  
[
    {
        "Id": "a47fe8335657dde1449fd40e21e51ab2395f63af8bf117cc7cca4adedc03d608",
        "Created": "2019-08-31T07:40:55.741413872Z",
        "Path": "httpd-foreground",
        "Args": [],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 51584,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2019-08-31T07:41:00.463663139Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        ..............................................

#我們可以看到這個容器有一個根據docker的虛擬交換機所分配到的ip地址
#我們根據ip地址來試試是否可以訪問到該容器的web服務
[root@docker ~]# curl 172.17.0.2
<html><body><h1>It works!</h1></body></html>
[root@docker ~]# 



#如果我們需要進入到一個容器內部去查看容器的各信息呢?
[root@docker ~]# docker exec -it   webapp01 /bin/bash
root@a47fe8335657:/usr/local/apache2# 
root@a47fe8335657:/usr/local/apache2# ls 
bin  build  cgi-bin  conf  error  htdocs  icons  include  logs  modules
#exec表示在運行的一個容器中運行一個命令
#-it表示以交互式的方式進行並分配一個tty終端,並寫上容器名稱
#/bin/bash表示進入容器之後使用哪個shell來進行交互


root@a47fe8335657:/usr/local/apache2# ls
bin  build  cgi-bin  conf  error  htdocs  icons  include  logs  modules
root@a47fe8335657:/usr/local/apache2# cd htdocs/
root@a47fe8335657:/usr/local/apache2/htdocs# ls
index.html
root@a47fe8335657:/usr/local/apache2/htdocs# cat index.html 
<html><body><h1>It works!</h1></body></html>
#可以看到確實是我們剛剛在宿主機上查看到的web服務內容

總結:和上篇認識Docker博客中提到的一樣,Docker最重要的三個概念就是倉庫、鏡像和容器;倉庫中存儲的各類應用程序的鏡像,我們需要把鏡像拉取到本地中來,在本地根據鏡像來啓動運行成爲一個容器實例,下面這張圖非常清晰的顯示了Docker鏡像、倉庫、容器之間的關係還有它們之間關聯的命令。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章