Docker环境安装

  • Post author:
  • Post category:其他




Docker简介

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



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"
 ],
 "live-restore": true
}


"live-restore": true

这里是指,docker重启启动后,会将停止的容器全部重启

保存成功后,执行

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 images



docker 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/data

docker 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/config

docker run -it -d -p 8080:80 --name="nginx_test" nginx

docker 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

指容器名称;



停止和恢复容器

我们可以通过

start



stop

命令 来启动或停止一个容器,参数为容器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    



版权声明:本文为qq_44614026原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。