Docker、docker安装及基础命令

  • Post author:
  • Post category:其他



Docker是什么?


Docker是一个在2013年开源的应用程序,并且是一个基于go语言编写的PAAS服务。

Docker最早采用LXC技术,之后改为自己研发并开源的runc技术运行容器。

Docker相比虚拟机的交付速度更快,资源消耗更低,Docker采用客户端、服务端架构,使用远程api来 管理和创建Docker容器。

Docker的三大理念是build(构建)、ship(运输)、run(运行)。

Docker遵从apache2.0协议,并通过namespace、cgroup等技术来提供容器的资源隔离与安全保障。

在这里插入图片描述
在这里插入图片描述

资源利用率更高:一台物理机可以运行数百个容器,但一般只能运行数十个虚拟机

开销更小:不需要启动单独的虚拟机占用硬件资源

启动速度更快:可以在数秒内完成启动

Docker的组成

Docker主机 host:一个物理机或者虚拟机,用于运行docker服务进程和容器

Docker服务端 Server:Docker守护进程,运行docker容器

Docker客户端 client:客户端使用docker命令或其他工具调用docker api

在我们的实验环境中 以上三者三合一 都是我们的Centos服务器

Docker仓库 registry:保存镜像的仓库,类似于git或svn这样的版本控制器

Docker镜像 images:镜像可以理解为创建实例使用的模板

Docker容器 container:容器是从镜像生成对外提供服务的一个或一组服务

以上三者构成了我们的整个docker的体系

在这里插入图片描述

在这里插入图片描述

docker安装及基础命令

安装docker-ce 以及客户端

[root@docker-server ~]# yum install wget.x86_64 -y 
[root@docker-server ~]# rm -rf /etc/yum.repos.d/* 
[root@docker-server ~]# wget -O /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo 
[root@docker-server ~]# wget -O /etc/yum.repos.d/epel-7.repo http://mirrors.aliyun.com/repo/epel-7.repo 
[root@docker-server ~]# wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
[root@docker-server ~]# yum install docker-ce -y    

启动docker

[root@docker-server ~]# systemctl enable docker.service 
Created symlink from /etc/systemd/system/multiuser.target.wants/docker.service to /usr/lib/systemd/system/docker.service. 
[root@docker-server ~]# systemctl start docker.service
[root@centos7-server yum.repos.d]# systemctl status docker    //查看docker状态
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: di
   Active: active (running) since Sat 2022-02-12 01:20:42 EST; 6s ago
     Docs: https://docs.docker.com
 Main PID: 10044 (dockerd)
    Tasks: 9
   Memory: 36.1M
   CGroup: /system.slice/docker.service
           └─10044 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.

确认docker版本

[root@centos7-server yum.repos.d]# docker version 
Client: Docker Engine - Community
 Version:           20.10.12
 API version:       1.41
 Go version:        go1.16.12
 Git commit:        e91ed57
 Built:             Mon Dec 13 11:45:41 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.12
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.16.12
  Git commit:       459d0df
  Built:            Mon Dec 13 11:44:05 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.12
  GitCommit:        7b11cfaabd73bb80907dd23182b9347b4245eb5d
 runc:
  Version:          1.0.2
  GitCommit:        v1.0.2-0-g52b36a2
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

通过docker来查找仓库当中名字叫做httpd的镜像(image)

[root@centos7-server yum.repos.d]# docker  search   httpd
NAME               DESCRIPTION                 AUTOMATED
httpd                                   The Apache HTTP Server Project                 
centos/httpd-24-centos7                 Platform for running Apache httpd 2.4 or bui   
centos/httpd                                                                           [OK]
arm32v7/httpd                           The Apache HTTP Server Project                 
hypoport/httpd-cgi                      httpd-cgi                                      [OK]
solsson/httpd-openidc                   mod_auth_openidc on official httpd image, ve   [OK]
publici/httpd                           httpd:latest                                   [OK]
clearlinux/httpd                        httpd HyperText Transfer Protocol (HTTP) ser   
inanimate/httpd-ssl                     A play container with httpd, ssl enabled, an   [OK]
manageiq/httpd                          Container with httpd, built on CentOS for Ma   [OK]
centos/httpd-24-centos8                                                                
dariko/httpd-rproxy-ldap                Apache httpd reverse proxy with LDAP authent   [OK]
lead4good/httpd-fpm                     httpd server which connects via fcgi proxy h   [OK]
dockerpinata/httpd                                                                     
jonathanheilmann/httpd-alpine-rewrite   httpd:alpine with enabled mod_rewrite          [OK]
interlutions/httpd                      httpd docker image with debian-based config    [OK]
e2eteam/httpd                                                                          
19022021/httpd-connection_test          This httpd image will test the connectivity    
appertly/httpd                          Customized Apache HTTPD that uses a PHP-FPM    [OK]
signiant/httpd                          httpd (apache2) base container with a custom   [OK]
ysli/httpd                              Httpd for DeepWeb                              [OK]
manageiq/httpd_configmap_generator      Httpd Configmap Generator                      [OK]
itsziget/httpd24                        Extended HTTPD Docker image based on the off   [OK]
trollin/httpd                                                                          
amd64/httpd                             The Apache HTTP Server Project      

当然我们也可以通过上docker-hub

docker的官方网页仓库来查找自己想要的镜像

https://hub.docker.com/

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

接下来可以通过命令来下载最新的httpd的镜像

[root@centos7-server yum.repos.d]# docker  pull httpd:latest
latest: Pulling from library/httpd
5eb5b503b376: Pull complete 
a43a76ccc967: Pull complete 
942bd346e7f7: Pull complete 
cdb155854ae6: Pull complete 
10c4d45228bf: Pull complete 
Digest: sha256:5cc947a200524a822883dc6ce6456d852d7c5629ab177dfbf7e38c1b4a647705
Status: Downloaded newer image for httpd:latest
docker.io/library/httpd:latest

通过以下命令可以查看当前系统已经下载的镜像

[root@centos7-server yum.repos.d]# docker  images 
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
httpd        latest    a8ea074f4566   2 weeks ago   144MB

接下来可以运行该镜像 使之成为一个CONTAINER 容器

[root@centos7-server yum.repos.d]# docker run   -d    -p   80:80   httpd
0f43c2e33fe5640e7828f5fd0a050c263decfc8516ec2e0656f85d5863d9d807

接下来可以查看当前正在运行的容器

[root@centos7-server yum.repos.d]# docker ps
CONTAINER ID   IMAGE     COMMAND              CREATED          STATUS          PORTS         NAMES
0f43c2e33fe5   httpd     "httpd-foreground"   10 minutes ago   Up 10 minutes   0.0.0.0/tcp   trusting_sanderson

此时因为我们是做了 容器的80端口 映射给宿主机的80端口,所以直接访问宿主机80端口就可以直接访问到该容器的httpd主页

在这里插入图片描述

如何对主页进行修改,我们不能在宿主机上对其进行修改,所以我们需要进入这个容器

[root@centos7-server yum.repos.d]# docker   exec    -it   0f43c2e33fe5    bash
root@0f43c2e33fe5:/usr/local/apache2# 
root@0f43c2e33fe5:/usr/local/apache2# 
root@0f43c2e33fe5:/usr/local/apache2# 
root@0f43c2e33fe5:/usr/local/apache2# 

注意上面的container ID 是docker ps显示的id

此时会发现已经进入到root@0f43c2e33fe5 已经在容器当中了

root@0f43c2e33fe5:/usr/local/apache2# ls

bin build cgi-bin conf error htdocs icons include logs modules

通过ls简单查看当前容器的目录结构

一般来说,apache的主页都叫index.html 所以我们可以查找一下这个主页

root@0f43c2e33fe5:/usr/local/apache2# find    /   -name   index.html
find: '/proc/1/map_files': Operation not permitted
find: '/proc/9/map_files': Operation not permitted
find: '/proc/10/map_files': Operation not permitted
find: '/proc/11/map_files': Operation not permitted
find: '/proc/93/map_files': Operation not permitted
find: '/proc/121/map_files': Operation not permitted
find: '/proc/129/map_files': Operation not permitted
/usr/local/apache2/htdocs/index.html   

此时我们发现 在/usr/local/apache2/htdocs/下有一个这个文件

我们可以对此文件进行编辑 或者把已经完成的前端代码 放入当前目录 就可以完成网站的部署工作

可以查看该主页的内容

root@0f43c2e33fe5:/usr/local/apache2/htdocs# cat   index.html 
<html><body><h1>It works!</h1></body></html>

最后一定要注意 我们需要返回宿主机 ,才能对容器进行停止操作

root@0f43c2e33fe5:/usr/local/apache2/htdocs# exit
exit

关闭当前容器

[root@centos7-server yum.repos.d]# docker  stop  0f43c2e33fe5
0f43c2e33fe5

[root@centos7-server yum.repos.d]# docker ps  -a
CONTAINER ID   IMAGE     COMMAND              CREATED          STATUS                
0f43c2e33fe5   httpd     "httpd-foreground"   11 minutes ago   Exited (0) 18 seconds ng_sanderson


docker ps -a

这个命令可以查看尚未运行的容器 显示是Exited状态 表明这个容器已经被关掉了



版权声明:本文为ly2635原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。