Docker基础学习
1.1.docker 基本概念
Docker 包括三个基本概念
镜像(Image) 容器(Container) 仓库(Repository)
Docker 镜像就是一个只读的模板。
例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了 Apache 或用户需要的其它应用程序。镜像可以用来创建 Docker 容器。Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。
Docker 容器
Docker 利用容器来运行应用。容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
Docker 仓库
仓库是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。仓库分为公开仓库(Public)和私有仓库(Private)两种形式。最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。
Docker 的主要用途,目前有三大类。
(1)提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。
(2)提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。
(3)组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。
1.2 Centos7 安装docker(CentOS8 安装 Docker)
1、更新update到最新的版本
yum update
2、卸载老版本docker
yum remove docker docker-common docker-selinux docker-engine
3、安装需要的软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
4、设置yum源
yum-config-manager —add-repo https://download.docker.com/linux/centos/docker-ce.repo
5、查看docker版本
yum list docker-ce —showduplicates|sort -r
6、安装docker
yum install docker-ce-18.03.1.ce -y
7、启动docker
systemctl start docker
8、加入开机自启
systemctl enable docker
9、配置阿里云容器镜像服务加速器(阿里云国内镜像加速-附操作注册镜像仓库操作指南 阿里云Docker Registry 操作指南)
sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{"registry-mirrors": ["https://pcnn9p02.mirror.aliyuncs.com"]}EOFsudo systemctl daemon-reloadsudo systemctl restart docker
1.3 快速入门
利用docker快速安装一个镜像,了解dockerFile指令
Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。dockerfile.txt(详细请参考code阿里云centos7.2-php7.2-nginx中具体的配置)
容器网络
Docker安装后,默认会创建下面三种网络类型
docker network ls 查看默认的网络
在启动容器时使用 —network bridge 指定网络类型
bridge:桥接网络
默认情况下启动的Docker容器,都是使用 bridge,Docker安装时创建的桥接网络,每次Docker容器重启时,会按照顺序获取对应的IP地址,这个就导致重启下,Docker的IP地址就变了
none:无指定网络
使用 —network=none ,docker 容器就不会分配局域网的IP
host: 主机网络
使用 —network=host,此时,Docker 容器的网络会附属在主机上,两者是互通的。
例如,在容器中运行一个Web服务,监听8080端口,则主机的8080端口就会自动映射到容器中
指定自定义网络
因为默认的网络不能制定固定的地址,所以我们将创建自定义网络,并指定网段:172.10.0.0/16 并命名为mynetwork,指令
docker network create --subnet=172.10.0.0/16 mynetwork
查看镜像
docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEswoft latest bc6c4346d34e 5 days ago 373MBmysql latest c8562eaf9d81 4 weeks ago 546MBphp 7.3-alpine 5b879b6b3734 2 months ago 74.3MBeasyswoole/easyswoole3 latest 1d89ebd1e0a4 10 months ago 616MBcentos 7.4.1708 9f266d35e02c 23 months ago 197MBalpine 3.5 f80194ae2e0c 2 years ago 4MB
删除镜像
docker rmi +镜像id或镜像名称
docker rmi bc6c4346d34e
接下来使用swoft镜像 创建容器
docker run -itd --name swoft --net swoftNetWork -p 8001:8001 --ip 172.10.0.2 -v /code/swoft:/var/www/swoft swoft
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-p: 端口映射,格式为:主机(宿主)端口:容器端口。将宿主机的8001端口映射到容器中的8001,宿主机ip或域名的访问:8001 实际访问容器8001端口。
-v 目录映射;将宿主机的目录映射到容器的目录中,若修改宿主机目录结构或文件,容器中也随之修改。
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
—ip: 为容器制定一个固定的ip
—net: 指定网络模式
—name 创建容器的名称
查看当前容器
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d687f4f1991d swoft “docker-php-entrypoi…” 4 days ago Up 4 days 0.0.0.0:9501->9501/tcp swoft
a00e278dfe8 5ff85 “/bin/sh -c ‘curl -s…” 5 days ago Exited (1) 5 days ago hopeful_williamson
停止容器
docker stop +容器id或容器名称
docker stop d687f4f1991d
重启容器
docker restart +容器id或容器名称
docker restart d687f4f1991d
删除容器
docker rm +容器id或容器名称
docker rm d687f4f1991d
注意:若要删除镜像,必须确保没有使用该镜像创建的容器;若要删除容器,必须先停止容器。
进入容器指令
docker exec -it 9f828500bb94 /bin/bash
