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状态 表明这个容器已经被关掉了