1. Docker和虚拟机的区别
- docker是一个系统进程,虚拟机是在操作系统中的操作系统
- docker体积小、启动速度快、性能好;虚拟机体积大、启动速度慢,性能一般
2. 镜像和容器
镜像(Image):Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像
容器(Container):镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器做隔离,对外不可见
3. Docker和DockerHub
- DockerHub:DockerHub是一个Docker镜像的托管平台,这样的平台称为Docker Registry
- 国内也有类似于DockerHub的公开服务,比如网易云镜像服务、阿里云镜像库等
4. Docker架构
Docker是一个CS架构的程序,由两部分组成:
- 服务端(server):Docker守护进程,负责处理Docker指令,管理镜像、容器等
- 客户端(client):通过命令或RestAPI向Docker服务端发送指令。可以在本地或远程向服务端发送指令
5. 安装docker
首先需要虚拟机联网,安装yum工具
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2 --skip-broken
然后更新本地镜像源,选用阿里云,国外的访问不了
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装ce版本
yum install -y docker-ce
启动docker、设置为开机自启动、测试版本
systemctl start docker
systemctl enable docker
docker version
配置镜像
docker官方镜像仓库网速较差,我们需要设置国内镜像,参考阿里云的镜像加速文档:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
6. 镜像
- 镜像一般分两部分组成:[repository]:[tag],例如:mysql:5.7
- 在没有指定tag时,默认是latest,代表最新版本的镜像
7. 使用docker --help可以查看docker的全部命令,使用docker 命令 --help可以查看具体某一个命令的详情
8. docker容器的三种状态
- 运行:进程正常运行
- 暂停:进程暂停,CPU不再运行,但不释放内存
- 停止:进程终止,回收进程占用的内存、CPU等资源
9. 范例:使用Docker容器
创建Nginx的容器运行命令
docker run --name containerName -p 80:80 -d nginx
命令解读
- docker run,创建并运行一个容器
- --name,给容器起一个名字,比如叫做test
- -p,将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
- -d,后台运行容器
- nginx,镜像名称,例如nginx
注意:容器是完全隔离的,没有用-p指定映射的话,将无法访问到容器
进入Nginx容器,修改HTML文件内容,添加“hello world”
首先需要进入容器,命令如下:
docker exec -it containerName bash
命令解读
- docker exec:进入容器内部,执行一个命令
- -it,给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互
- containerName:要进入的容器名
- bash:进入容器后执行的命令,这里可依据具体情况更改,bash是一个Linux终端交互命令
然后访问官网查看html文件的路径,使用cd切换到目标路径
cd /usr/share/nginx/html
使用vi命令修改,会发现修改不了,因为容器是Nginx,不是完整系统属于阉割版,使用sed命令进行内容的直接替换
sed -i 's#Welcome to nginx#hello world#g' index.html
sed -i 's#<head>#<head><meta charset="utf-8">#g' stindex.html
最后使用命令停掉容器即可
docker stop containerName
使用docker ps -a查看所有容器(包括停止的)
注意:不建议对容器内部直接修改
10. 数据卷(Volume):是一个虚拟目录,指向宿主机文件系统中的某个目录,数据卷由docker管理路径
操作数据卷
数据卷基本语法如下:
docker volume [COMMAND]
docker volume命令是数据卷操作,根据命令后跟随的command来确定下一步操作:
- create,创建一个volume
- inspect,显示一个或多个volume信息
- ls,列出所有的volume
- prune,删除未使用的volume,create创建的自定义数据卷不能被删除
- rm,删除一个或多个指定的volume
- --help,查看帮助文档
数据卷挂载容器
在创建容器时,可以通过-v参数来挂载一个数据卷到某个容器目录,语法如下
docker run ... -v [主机数据卷目录]:[容器目录] [镜像名称]
注意:数据卷不存在会自动创建
主机目录挂载容器
主机目录挂载和数据卷挂载类似,具体语法如下:
- -v[宿主机目录]:[容器内目录]
- -v[宿主机文件]:[容器内文件]
注意:容器内目录和容器内文件的具体路径需要去官网查,下面是mysql挂载的例子
docker run \
--name mysql \
-e MYSQL_ROOT_PASSWORD=123 \
-p 3306:3306 \
-v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf,d/hmy.cnf \
-v /tmp/mysql/data:/var/lib/mysql \
-d \
mysql:5.7.25
11. Docker镜像仓库
公有的在之前提及,比如docker官方,阿里云等
Docker基础知识