部署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镜像、仓库、容器之间的关系还有它们之间关联的命令。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值