目录
Docker 是一个开源的应用容器引擎,它基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级的可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
在有docker之前,我们一般使用虚拟化技术在一台电脑上部署多个项目,容器和虚拟机具有相似的资源隔离和分配优势,但功能不同,从下图可以看出,容器虚拟化了操作系统,而不单单是硬件,相对虚拟机容器更加简单便携。
容器相当于将代码和依赖打包在一起,形成一个整体来运行。多个容器可以在同一台计算机上运行,并与其他容器共享操作系统内核,每个容器在用户空间中作为隔离的进程运行,可以在创建容器的时候再分配对应的空间,所需的空间大小比VM小的多
虚拟机(VM)是将一台服务器当作多台服务器来使用。虚拟机管理程序允许多个VM在单台计算机上运行。每个VM都包含操作系统,应用程序,必要的二进制文件等数个GB的系统。需要在创建之初就为虚拟机分配足够的内存空间
基本概念
Docker中包含三个基本概念:
Container(容器):
容器是打包代码及其所有依赖项的软件的标准单元,因此应用程序可以从一个机器环境快速可靠地运行到另一个环境。Docker容器是轻巧的,独立的,可执行的软件包,其中包含运行应用程序所需的一切代码,系统工具,系统库和配置文件等。
A container is a standard unit of software that packages up code and all its dependencies so the application runs quickly and reliably from one computing environment to another. A Docker container image is a lightweight, standalone, executable package of software that includes everything needed to run an application: code, runtime, system tools, system libraries and settings.
Image(镜像):
An image is a read-only template with instructions for creating a Docker container. Often, an image is based on another image, with some additional customization.
镜像在docker引擎上运行就是一个容器了,所以image相当于是容器的一个模板,它包含容器运行所需的一切代码,环境参数,配置文件等
Image和Container的关系:
Container images become containers at runtime and in the case of Docker containers - images become containers when they run on Docker Engine.
Repository(仓库)
存储镜像的地方,可以有docker官方的repository,也有阿里云的,也可以搭建自己的镜像仓库,类似于maven仓库
简单的理解:仓库是用来存储镜像的地方,我们从仓库获取到镜像,然后通过镜像来生成一个个容器,在生成过程中可以指定参数生成自己想要的不同的容器对象
docker引擎
Docker Engine主要包含以下组件:
-
服务器是一种长期运行的程序,称为守护程序进程(dockerd命令)。
-
REST API,它指定程序可以用来与守护程序(服务器)进行通信并指示其操作的接口。
-
命令行界面(CLI)客户端(我们常说的docker命令)。
CLI使用Docker REST API通过脚本或直接CLI命令来控制Docker守护程序或与Docker守护程序进行交互。
docker架构
Docker使用客户端-服务器架构。Docker 客户端与Docker daemon 守护进程进行 通信,该守护进程接受客户端的命令后,依据命令执行构建,运行和分发Docker容器等工作,并与registry(其实就是docker的镜像仓库)进行交互。
使用docker pull或者docker run命令时,所需的image将从配置的docker仓库中下载。使用docker push命令时,会将image推送到配置的docker仓库。
安装docker
先切换到root用户 sudo -i
1.如果有安装docker,先卸载
[root@10 ~]# sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
2.下载docker依赖
[root@10 ~]# sudo yum install -y yum-utils device-mapper-persistent-data lvm2
3.设置docker仓库地址
[root@10 ~]# sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
4.安装docker
[root@10 ~]# sudo yum install -y docker-ce docker-ce-cli containerd.io
由于虚拟机下载速度慢,导致docker安装不成功,设置成阿里的镜像仓库地址
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
再次尝试
5.设置阿里云镜像加速器
url:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
[root@10 ~]# sudo mkdir -p /etc/docker
[root@10 ~]# sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://2a3ats4n.mirror.aliyuncs.com"]
}
EOF
[root@10 ~]# sudo systemctl daemon-reload
6.启动docker
[root@10 ~]# sudo systemctl start docker
7.安装tomcat
[root@10 ~]# docker pull tomcat
##将tomcat端口映射成centos宿主机端口 9090
[root@10 ~]# docker run -d --name my-tomcat -p 9090:8080 tomcat
成功通过宿主机ip端口访问tomcat
docker常用命令
image相关命令
(1) 查看本地image列表
docker images
docker image ls
(2) 获取远端镜像
docker pull
(3) 删除镜像[注意此镜像如果正在使用,或者有关联的镜像,则需要先处理完]
docker image rm imageid
docker rmi -f imageid
docker rmi -f $(docker image ls) 删除所有镜像
(4)运行镜像
docker run image
(5)发布镜像
docker push
container相关命令
(1)根据镜像创建容器
docker run -d --name -p 9090:8080 my-tomcat tomcat
(2)查看运行中的container
docker ps
(3)查看所有的container[包含退出的]
docker ps -a
(4)删除container
docker rm containerid
docker rm -f $(docker ps -a) 删除所有container
(5)进入到一个container中
docker exec -it container bash
(6)停止/启动容器
docker stop/start container