Docker基础知识

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容器的三种状态

  1. 运行:进程正常运行
  2. 暂停:进程暂停,CPU不再运行,但不释放内存
  3. 停止:进程终止,回收进程占用的内存、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基础知识
刘旭晟 2024年11月6日
分析这篇文章

存档
登录 留下评论
理解Frappe基础知识