> 文章列表 > Docker环境安装

Docker环境安装

Docker环境安装

Docker环境安装

      • Docker简介
        • Docker工作原理
        • Docker的应用场景
        • Docker 的优点
      • CentOS Docker 安装与配置
        • Docker 安装
        • Docker 配置
      • Docker容器概念
        • Docker容器操作
          • 拉取镜像
          • 删除镜像
          • 容器相关命令
          • 创建并启动容器
          • 停止和恢复容器
          • 删除容器

Docker简介

  • Docker 是一个开源的应用容器引擎,基于 Go 语言并遵从 Apache2.0 协议开源;
  • Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化;
  • 容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低;
  • Docker 从 17.03 版本之后分为 CE(Community Edition-社区版)和 EE(Enterprise Edition-企业版)

Docker工作原理

Docker环境安装

docker引擎是一个C/S结构的应用

Server是一个常驻进程

REST API实现了client和server间的交互协议

CLI实现容器和镜像的管理,用户通过命令行对其操作

Docker的应用场景

  • Web 应用的自动化打包和发布。
  • 自动化测试和持续集成、发布。
  • 在服务型环境中部署和调整数据库或其他的后台应用。
  • 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。

Docker 的优点

Docker 是一个用于开发,交付和运行应用程序的开放平台。能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,大大减少编写代码和在生产环境中运行代码之间的延迟。

CentOS Docker 安装与配置

Docker 安装

使用官方安装脚本自动安装,借助阿里云镜像进行加速

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

或使用国内 daocloud 一键安装命令

curl -sSL https://get.daocloud.io/docker | sh

安装成功后,可以通过docker --version查看docker版本

Docker 配置

配置docker国内源

cd /etc/docker 进入该目录下,使用ls 命令查看该目录下是否有daemon.json文件,如果没有,使用vim daemon.json编辑文件,插入内容

{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn","https://registry.docker-cn.com","https://hub-mirror.c.163.com","https://mirror.ccs.tencentyun.com",  "https://reg-mirror.qiniu.com"]
}

保存成功后,执行systemctl daemon-reload进行重载,然后执行systemctl start docker重新启动docker

Docker服务

systemctl status docker   #查看docker状态
systemctl enable docker   #设置默认开机启动
systemctl start docker    #启动docker
systemctl restart docker  #重新启动docker
systemctl stop docker     #停止docker

Docker容器概念

镜像(Images):容器的模板,包括容器运行时所需要的数据

容器(Container):运行的进程,依赖镜像运行,镜像的具体化

容器类似于WMware虚拟机,WMware虚拟机可以根据CentOS镜像创建多个CentOS系统,一个镜像可以创造出多个容器。而容器内可以创建对应的环境,如容器1:Tomcat+Java;容器2:PHP+Mysql。容器之间互不影响

Docker容器操作

拉取镜像

想要运行容器必须提前下载好对应的镜像,比如想运行一个mariadb10.7版本的容器,需要先在本地有这个镜像才能运行。

镜像需要在镜像仓库上去下载,就像代码是托管在代码仓库上的,默认情况下需要从公有仓库,也就是dockerhub上下载镜像,dockerhub上有海量的镜像提供选择,构建环境的时候可以直接下载其中的镜像来使用

从镜像仓库拉取镜像:docker pull 镜像:Tag,Tag相当于镜像工具的版本,可省略,省略则默认为拉取最新版本

docker pull mariadb:10.7
docker pull mysql:8.0
docker pull nginx

/var/lib/docker/目录下,有个iamge目录,该目录下存放的,则是从镜像仓库上下载下来的镜像

可以通过docker imagesdocker image ls命令查看本地有哪些镜像

[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    6efc10a0510f   3 days ago    142MB
mariadb      10.7      4a632f970181   4 weeks ago   401MB
mysql        8.0       412b8cc72e4a   8 days ago    531MB
删除镜像

删除镜像,需提前删除对应的容器:docker rmi 镜像id或者镜像名

docker rmi mariadb:10.7
docker rmi 6efc10a0510f

如果拉取镜像的时候指定了版本,指定镜像名删除镜像的时候,也需要带上版本号

容器相关命令
docker run <options> 镜像:tag commands   # 新建一个容器并启动docker stop 容器ID或名称                  # 停止运行中的容器
docker start 容器ID或名称                 # 启动停止的容器
docker restart 容器ID或名称               # 重启容器docker logs -f 容器ID/名称				# 查看容器日志
docekr inspect 容器ID/名称				# 查看容器详细信息
创建并启动容器

docker run <options> 镜像:tag commands

options表示选项,用于运行容器时一些额外的配置,commands表示运行在容器内部的命令,比如容器内部要运行一个python脚本,commands可以替换为 python commands。

常用的选项有:

-d 指定容器运行后台 
-i 用于控制台交互 
-t 支持终端登录,通常和-i参数一起使用 
-p 映射容器端口,用法:-p 宿主机端口:容器端口 
-v 挂载容器存储卷,用法:-v 宿主机路径:容器路径
-e 设置容器的环境变量用于容器内的应用程序进行相关配置,用法 -e 环境变量名=变量值
--name=“container_name” 指定容器的名称
--rm 退出容器时删除容器 与--restart冲突
--restart=“always” 容器停止后,docker再次启动,自动重启容器 与 --rm冲突

例如:

docker run -it -p 8888:3306 -e MARIADB_ROOT_PASSEORD=test mariadb:10.7

mariadb服务默认监听3306端口,但是容器内部的网络和宿主机不在一个网段,所以我们把该端口映射到了宿主机的3306端口,现在我们通过访问宿主机的8888端口就可以访问mariadb了

-e MARIADB_ROOT_PASSEORD=test这行指配置mariadb的root账号的密码为test

此时我们的进程是运行在前台的,如果关闭窗口就可能造成容器进程退出,所以如果想让容器一直不退出,可以在运行的时候加上-d参数,让容器进程作为守护进程。

docker run -it -d -p 9999:3306 -e MYSQL_ROOT_PASSEORD=123456 --name="db_mysql" 
mysql:8.0

如果要删除容器,但是又要备份容器的数据,可以通过-v参数指定挂载容器存储卷,设置容器目录/var/lib/mysql映射到本地目录/data/mariadb/data

mkdir -p /data/mariadb/datadocker run -it -d -p 8889:3306 -e MARIADB_ROOT_PASSEORD=123456  --name="db_mariadb"  -v /data/mariadb/data:/var/lib/mysql mariadb:10.7

还可以通过docker cp命令将docker容器内的配置文件信息复制到宿主机上,将nginx_test容器内Nginx的/etc/nginx目录下的配置文件信息,复制到宿主机的/data/nginx/config目录下

mkdir -p /data/nginx/configdocker run -it -d -p 8080:80 --name="nginx_test" nginxdocker cp nginx_test:/etc/nginx  /data/nginx/config

此时可以通过 docker ps 命令查看运行中的容器

如果没有指定容器名称,会随机分配,通常情况下,创建容器的时候都指定容器的名称,这样停止容器的时候,方便操作

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE       COMMAND                   CREATED          STATUS          PORTS                                                  NAMES
75812ef6b412   mysql:8.0   "docker-entrypoint.s…"   3 minutes ago    Up 3 minutes    33060/tcp, 0.0.0.0:9999->3306/tcp, :::9999->3306/tcp   db_mysql
a21665817d61   mariadb     "docker-entrypoint.s…"   14 minutes ago   Up 14 minutes   0.0.0.0:8888->3306/tcp, :::8888->3306/tcp              busy_dirac

参数内容:CONTAINER ID指容器id;IMAGE指使用的镜像名称;COMMAND指启动容器时运行的命令;STATUS指容器状态;PORTS指容器端口映射信息;NAMES指容器名称;

停止和恢复容器

我们可以通过startstop命令 来启动或停止一个容器,参数为容器ID或者容器名

docker stop 75812ef6b412    #停止一个容器 75812ef6b412
docker stop db_mysql		#停止mysql服务的容器 
docker start 75812ef6b412   #恢复停止中的容器 75812ef6b412

若容器在运行过程中发生异常而退出,docker ps命令是看不到终止的进程的,可以通过-a参数列出所有的进程,包括已经停止的(状态为Exited)

CONTAINER ID   IMAGE      	 COMMAND                   CREATED          STATUS                      PORTS                                       NAMES
75812ef6b412   mysql:8.0   	 "docker-entrypoint.s…"   13 minutes ago   Exited (0) 2 seconds ago                                                db_mysql
a21665817d61   mariadb:10.7	 "docker-entrypoint.s…"   24 minutes ago   Up 24 minutes               0.0.0.0:8888->3306/tcp, :::8888->3306/tcp   busy_dirac
删除容器

删除容器使用 docker rm 命令,可以通过容器名或者容器id进行删除

docker rm [OPTIONS] CONTAINER [CONTAINER...]
OPTIONS说明:
-f :通过 SIGKILL 信号强制删除一个运行中的容器。
-l :移除容器间的网络连接,而非容器本身。
-v :删除与容器关联的卷。docker rm -f db_mysql
docker rm -f 75812ef6b412