Docker

Docker

一、Docker的思想

  1. 集装箱:会将所有需要的内容放到不同的集装箱中,然后再放到一个公共的中央仓库中,谁需要这些环境就直接拿到这个集装箱就可以了

  2. 标准化:

    ​ <1> 运输的标准化:Docker有一个中央仓库,所有上传的集装箱都放在了这一个中央仓库里,当谁的需要某一个环 境,就直接指派运输员去搬运这个集装箱就可以了

    ​ <2> 命令的标准化:Docker提供了一系列的命令,帮助我们去获取集装箱等操作

    ​ <3> 提供了REST的API:衍生出了很多图形化界面,比如Rancher

  3. 隔离性:Docker在运行集装箱内的内容时,会在Linux的内核中单独开辟一片空间,这片空间不会影响到其他程序

注册中心(中央仓库)

镜像(集装箱)

容器(运行起来的镜像)

二、Docker的基本操作

2.1 安装Docker

Step1:下载关于Docker的依赖环境

yum -y install yum-utils device-mapper-persistent-da ta 1vm2

Step2:设置下载Docker的镜像源

## 设置为阿里云的
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

Step3:安装Docker

yum make cache fast
yum -y install docker-ce

Step4:启动Docker,并设置为开机自启动,测试是否启动成功

systemctl start docker  # 启动
systemctl enable docker  # 开机自启动

docker run hello-world  # 测试

2.2 Docker的注册中心

  1. Docker官方的注册中心:镜像最全,但是下载速度慢
  2. 国内的镜像网站:网易蜂巢、阿里云、daocloud

2.3 镜像操作

  1. 镜像拉取到本地
docker pull 镜像路径  # 镜像路径从镜像网站copy
  1. 查看全部本地的镜像
docker images
  1. 删除本地镜像
docker rmi 镜像唯一标识  # 可以通过docker image查看IMAGE ID
  1. 镜像的导入导出
docker save -o 导出的路径 镜像id  # 导出镜像文件
docker load -i 镜像文件  # 加载本地的镜像文件
docker tag 镜像id 新镜像名称:版本  # 加载本地的镜像默认没有名称和TAG, 需要手动修改

2.4 容器的操作

  1. 运行容器
docker run -d -p 宿主机端口:容器内端口 --name 容器名称 镜像id或镜像名称:TAG版本

# -d: 代表后台运行容器
# -p 宿主机端口:容器内端口: 为了映射当前Linux端口和容器内的端口, 外部访问时只需要访问 Linux ip:Linux端口
  1. 查看容器
docker ps [-qa]

# -q: 只查看容器的id
# -a: 查看全部容器, 不加-a就只查看正在运行的容器
  1. 查看容器日志
docker logs -f 容器id

# -f: 可以滚动查看容器日志的最后几行
  1. 停止容器
docker stop 容器id
docker stop $(docker ps -qa)  # 停止全部容器
  1. 删除容器
## 注意: 删除容器之前需要先停止容器
docker rm 容器id
docker rm $(docker ps -qa)  # 删除全部容器
  1. 进入容器内部
docker exet -it 容器id bash  # bash不成功时可以用sh

三、使用Docker部署SSM项目

3.1 准备MySQL容器

docker pull 镜像路径  # 拉取mysql镜像

docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root 镜像id  # 运行mysql镜像

# MYSQL_ROOT_PASSWORD=root 是在指定mysql root用户的密码

3.2 准备Tomcat容器

docker pull 镜像路径  # 拉取tomcat镜像

docker run -d -p 8080:8080 --name tomcat 镜像id  # 运行tomcat镜像

3.3 把SSM项目部署到Tomcat容器

docker cp ssm项目war包文件名 tomcat容器id:容器内的路径

3.4 数据卷

将宿主机的目录和容器内的一个目录进行映射,这样就可以在宿主机中操作文件,容器内部映射的文件也会跟着一起改变。(可以不用复制ssm.war到容器内了,直接复制到映射的目录即可)

数据卷的操作:

  1. 创建数据卷
docker volume create 数据卷名称

# 创建的数据卷默认存放在 /var/lib/docker/volumes/ 目录下
# 这个目录下的 数据卷名称/_data/ 目录内存放映射的内容
  1. 查看数据卷的详细信息
docker volume inspect 数据卷名称

3.查看全部数据卷

docker volume ls
  1. 删除数据卷
docker volume rm 数据卷名称
  1. 应用数据卷
## 运行容器, 并映射容器内的路径到数据卷
docker run -d -p 端口:端口 -v 数据卷名称:容器内部路径 镜像id

## 也可以在运行容器时直接指定一个路径作为数据卷与容器内部进行映射(常用)
docker run -d -p 端口:端口 -v 路径:容器内部的路径 镜像id

四、Dockerfile

以Docker自定义镜像的方式部署项目

Step1:准备一个空文件夹创建一个名为Dockerfile的文本文件(注意:没有后缀)

​ Dockerfile文件中常用的内容:

    - from:指定当前自定义镜像的下载路径
    - copy:在容器运行后将某文件复制到容器内的路径
    - workdir:声明镜像的默认工作目录(不写就默认Dockerfile所在的目录)
    - cmd:需要执行的命令(不写也会默认开启Tomcat)

Dockerfile文件例:

from daocloud.io/library/tomcat:8.5.15-jre8

# copy的第一个参数不写全路径是因为已经把ssm.war复制到准备要创建Dockerfile文件的文件夹中
# 第二个参数是运行后容器内部的路径
copy ssm.war /usr/local/tomcat/webapps

Step2:将Dockerfile文件所在的目录制作成自定义镜像

docker build -t 自定义一个镜像名称:版本 .

# . 表示当前目录
docker images  # 查看自定义的镜像id

Step3:运行自定义镜像

docker run -d -p 端口:端口 镜像id

五、Docker-compose

可以通过docker-compose.yml文件编写运行容器所需的参数,一个docker-compose.yml文件可以指定运行多个容器,也可以同时管理多个容器,达到批量管理容器的目的

5.1下载Docker-compose

Step1:在github中下载,并放到Linux中

Step2:把Docker-compose文件的权限修改为可执行

Step3:把Docker-compose文件所在的路径添加到环境变量

5.2 使用Docker-compose管理容器

docker-compose.yml文件编写示例:

version: '3.1'

service:
  # 这里是服务的名称
  mysql:  
    # 表示只要docker启动, 这个容器就跟着一起启动
    restart: always  
    # 指定这个容器所用的镜像路径
    image: daocloud.io/library/mysql:5.7  
    # 指定容器的名称
    # 即可以通过docker ps查看到的容器名
    container_name: mysql  
    # 映射宿主机端口和容器内部端口
    ports:
      - 3306:3306
    enviroment:
      # 指定MySQL root用户的登录密码
      MYSQL_ROOT_PASSWORD: root
      # 指定时区
      TimeZone: Asia/Shanghai
    # 做数据卷映射
    volumes:
      - /mydata/mysql:/var/lib/mysql
    
  tomcat:
    restart: always  
    image: daocloud.io/library/tomcat:8.5.15-jre8 
    container_name: tomcat  
    ports:
      - 8080:8080
    volumes:
      - /mydata/tomcat/webapps:/var/lib/tomcat/webapps

5.3 使用docker-compose命令管理容器

注意:在使用docker-compose命令时会默认在当前目录下找docker-compose.yml文件

docker-compose up -d  # 启动当前docker-compose.yml文件管理的全部容器
docker-compose down  # 关闭并删除容器
docker-compose stop  # 关闭单不删除容器
docker-compose ps  # 查看当前docker-compose.yml文件管理的全部容器
docker-compse -f  # 查看日志

5.4 docker-compose配合Dockerfile使用

使用docker-compose.yml文件以及Dockerfile文件在生成自定义镜像的同时启动该自定义镜像,并且交由docker-compose管理自定义镜像的生成的容器

Step1:编写Dockerfile文件:

from daocloud.io/library/tomcat:8.5.15-jre8
copy ssm.war /usr/local/tomcat/webapps

Step2:编写docker-compose.yml文件:

version: '3.1'

service:
  ssm:
    restart: always
    # 构建自定义镜像
    build:
      # 指定Dockerfile文件所在的路径
      context: /mydata/ssm 
      # 指定Dockerfile文件名称
      dockerfile: Dockerfile
    # 指定自定义镜像名称和版本 
    image: ssm:1.0
    container_name: ssm
    ports:
      - 8081:8080
    enviroment:
      TimeZone: Asia/Shanghai

Step3:使用docker-compose运行容器,如果自定义镜像不存在则会自动构建自定义镜像并运行,如果自定义镜像存在则直接可以运行

docker-compose up -d
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Author: EdenVersion: 9.0.1B站配套视频:https://www.bilibili.com...
    唐湙林阅读 397评论 0 1
  • 大家好,我是前端dog君,一名95后前端小兵。2019年毕业于北京化工大学,天津人,不知道有校友和老乡嘛?对前端的...
    前端dog君阅读 796评论 0 0
  • 一、Docker介绍 1.1引言 为什么使用docker?传统环境:​ 1.环境不一致。​ 2.在多用户的操作系统...
    蓝胖子的白日梦丶阅读 9,370评论 0 15
  • 公司没有运维,大部分部署需要前端来参与,于是便学习一下Docker,方便web服务的部署。我主要是在B站学习Doc...
    人猿Jim阅读 338评论 0 0
  • 本文非小马原创,为学习总结笔记,作为日后复盘回顾,感谢原作者分享,文末已注明出处,侵删。 一、什么是docker ...
    小马过河R阅读 376评论 9 3

友情链接更多精彩内容