前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

docker

作者头像
Dean0731
发布2022-05-10 16:20:04
3850
发布2022-05-10 16:20:04
举报
文章被收录于专栏:blog-技术博客blog-技术博客

Docker

  1. 简介
    • 开源的应用容器引擎,基于Go语言
    • 完全隔离的沙箱机制,类似app之间的关系
    • 重要的是性能开销极低
      • 程序简化
      • docker镜像中包含环境,服务环境搭建简单

2. 应用场景

  1. web自动打包发布
  2. 自动化测试
  3. 在服务型环境中部署,调整 应用

3. Docker引擎

  1. 包含以下组件的客户端服务器应用程序
    • 一种服务器,一种称为守护进程并长时间运行的程序
    • REST API 用于指定程序可以用来与守护进程通信的接口
    • 一个有命令行界面的CLI工具的客户端

4. Docker系统架构

  1. 使用客户端-服务器架构模式,使用远程api来管理和创建Docker容器
  2. Docker容器通过Docker镜像来创建
  3. 关系:容器---》对象,镜像------》类
    1. 镜像封装了基本的属性
    2. 真正操作的是容器,
  4. docker pull ---->守护进程---》创建两个容器------》本机存在镜像的时候直接创建,否则到docker库下载

5. Docker安装

  1. 可以安装在windwos,mac,linux
  2. 前提条件
    1. 若为linux只适用于64位
    2. linux内核要大于3.10
  3. 一般使用脚本安装(linux环境ubuntu)
    1. 使用在线安装脚本
      1. curl -sSL https://get.daocloud.io/docker | sh
      2. 执行后会下载安装包 若报错表示未更新数据源,/etc/apt/source.list 可更新为阿里云的数据源 apt-get update
      3. 再次执行1即可 与网络环境有关,失败再次尝试即可

      或直接:sudo apt-get install -y docker.io

    2. 默认安装的是client,server
      1. root 可操作两个版本,普通用户只能使用client
      2. sudo usermod -aG docker 用户名 ,普通用户加入docker组即可(重新登陆生效或newgrp docker 生效)
    3. 配置加速器
      1. docker镜像都在海外
      2. vim /lib/systemd/system/docker.service
      3. 添加 --registry-mirror=https://jxus37ac.mirror.aliyuncs.com 到ExecStart

代码语言:javascript
复制
ExecStart=/usr/bin/dockerd --registry-mirror=https://jxus37ac.mirror.aliyuncs.com

d . 重启docker 服务

6. 第一个Docker应用程序

代码语言:javascript
复制
docker run ubuntu:15.10 /bin/echo "hello Docker" 

从网上下载ubuntu15.10 的镜像,创建一个容器 ,使用容器打印 “hello docker" 运行完毕就会释放

代码语言:javascript
复制
docker images 

查看所有的镜像

代码语言:javascript
复制
docker ps 

查看启动中的容器, -a 参数 查看所有的,包括结束的

代码语言:javascript
复制
docker rm containerID 

删除容器,id很长,通常情况下只适用前n位也可 rmi 可删除镜像

代码语言:javascript
复制
docker run -it ubuntu:15.10 /bin/bash 

占用主线程的交互式容器,即可进入Ubuntu容器 root命令行

代码语言:javascript
复制
docker run -d ubuntu:15.10 /bin/bash -c "while true:do echo hello docker;sleep 1;done" 

后台运行 -d表示在后台

代码语言:javascript
复制
docker logs containerId 

查看容器日志,加参数 -f可动态查看

代码语言:javascript
复制
docker stop containerId 

停止容器

代码语言:javascript
复制
docker exec -it containerId /bin/bash 

适用bash与正在运行的容器进行交互

7. Docker客户端

代码语言:javascript
复制
docker COMMAND --help 

8. 运行web容器

代码语言:javascript
复制
docker run -d -P training/webapp python app.py 

在一个完整的操作系统上运行python程序 -P:表示把容器的端口映射到宿主机,宿主机随机一个端口映射到容器 docker ps 查看 镜像为training/webapp 它是一个flask程序 运行命令python app.py

可以将自己写的java等打包成容器

代码语言:javascript
复制
docker run -d -p 4000:5000 training/webapp python app.py 

-p:可以指定访问端口 宿主机4000,容器5000

代码语言:javascript
复制
docker top containerId docker top names 

查看容器中的进程

代码语言:javascript
复制
docker inspect 

查看容器状态:json字符格式

docker 安装后会产生一个虚拟网卡,mac等,容器产生的Ip都是基于虚拟网卡的

代码语言:javascript
复制
docker tag containerId imageName:newTag 

出现一个新的image,与上个同名,tag不同, 设置镜像标签

代码语言:javascript
复制
docker rm containerId1  containerId2 

同时移除多个容器

9. Docker镜像管理

若使用的镜像不存在会从 Docker Hub 下载

代码语言:javascript
复制
docker pull tomcat
docker pull tomcat:8.5.49-jdk11-openjdk 

获取镜像,默认获取最新版本,也可以指定版本获取

代码语言:javascript
复制
docker search tomcat 

查找镜像,一般选择官方的,使用docker pull name 获取, starts 表示的是使用量,可作为评价标准

创建镜像

从已经创建的容器中更新镜像,并且提交这个镜像

交互式运行ubuntu,进入bash

apt-get update

  1. 可能会报错,数据源错误
  2. 需要修改容器内source.list
  3. vim 修改即可,若没有vim命令,可使用echo 命令覆盖文件

退出容器,此时若不提交,以上的操作下次生成容器时会重置

代码语言:javascript
复制
docker commit -m="has update" -a="userName" containerId  newImageName:Tag(随便) 

修改源镜像------》提交为一个新的镜像

使用DockerFile指令来创建镜像

  1. 真正的创建镜像
代码语言:javascript
复制
mkdir myUbuntu
cd myUbuntu
vi Dockerfile #(名字不要更改)
    FROM ubuntu:15.10 # 系统
    MAINTAINER your-email
    COPY test.txt /home # 将宿主机的文件test.txt copy 到镜像的home下
    RUN /bin/bash -c "Hello world" # 指定镜像默认执行的命令
    CMD ["/bin/echo","this is param1"] # 文件中只能有一个cmd,有多个会只执行第一个
    WORKDIR /home # 指定默认的工作目录
    EXPOSE 80 # 暴露端口
    EXPOSE 8080
docker build -t yourImageName . # 在当前目录查找dockerfile 为改文件的镜像命名

10. Docker实例教程

代码语言:javascript
复制
# 使用docker 后台运行tomcat容器 并做端口映射,并修改容器的默认名字为tomcat,
docker run --name tomcat -p 8080:8080 -d tomcat
# 若要在容器内tomcat 部署程序,交互式进入,写自己的html即可
代码语言:javascript
复制
docker pull mysql # 拉去mysql 镜像
docker run -p 3306:3306 -name mysql \
-v /usr/local/deoker/mysql/conf:/etc/mysql \ # 映射宿主机目录到容器目录
-v /usr/local/docker/mysql/logs:/val/log/mysql \ # -v 数据卷
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \ # -e 指定环境边变量
-d mysql
# 若以后要重新运行时,密码变更了,需要删除宿主机下原来的数据卷,否则会不生效,还使用原来的配置。
代码语言:javascript
复制
vim Dockerfile
    FROM tomcat
    MAINTAINER email
    ADD xxx.war /usr/local/tomcat/webapps/xxx.war # 添加war包到容器
docker build -t name . # 构建镜像
docker run -d -p 8080:8080 imageName
# 本方式是直接将war打入本镜像,比较麻烦,可使用数据卷解决

部署项目

11. 数据卷

  1. 优点
    1. 绕过拷贝写,修改容器内容相当于直接修改宿主机内容,性能高
    2. 不需要在docker commit 打包进镜像文件
    3. 宿主,容器,容器之间共享文件
  2. 创建数据卷
    1. 方法一

代码语言:javascript
复制
docker run -d -P -v /webapps training/webapps python app.py
# 将tomcat容器的目录映射到宿主目录,即时原容器目录有内容也不可用
docker run -name tomcat1 -d -p 8080:8080 -v
	/usr/local/docker/tomcat/share/webapps:
	/usr/local/tomcat/webapps tomcat

b. 方法二 dockerfile中指定 VOLUME /var/lib/test

  1. 备份数据卷

代码语言:javascript
复制
docker run -p 3306:3306 -name mysql \
-v /usr/local/deoker/mysql/conf:/etc/mysql \ 
-v /usr/local/docker/mysql/logs:/val/log/mysql \ 
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \ 
-d mysql
# 启动数据库
  1. 恢复数据卷,其重新的容器时,挂载备份的文件即可

12. Docker Compose

  1. 简化docker操作的工具
  2. 安装docker-compose

代码语言:javascript
复制
curl -L https://github.com/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 或直接下载上传即可

重命名为docker-compose, 放入环境变量目录 chown -R root:root docker-compose 赋给root chmod +x docker-compose 加执行权限

  1. docker-compose 使用

代码语言:javascript
复制
# 启用tomca容器
# 原始方法:docker run .......
# docker-compose
mkdir tomcat;cd tomcat
vim docker-compose.yml # yml 语言
	version: "3" # compose的版本号决定
	services:
	 tomcat: # 服务名字,可变的
	  restart:always
	  image:tomcat
	  container_name:tomcat
	  ports:
	  	- "8080:8080"
docker-compose up # 此时是主线程启动
docker-compose down # 停止,并删除
代码语言:javascript
复制
docker-compose up -d # 后台运行 必须在docker-compose.yml所在的目录
代码语言:javascript
复制
version: "3"
services:
 tomcat:
  restart:always
  image:tomcat
  container_name:tomcat
  ports:
   - "8080:8080"
  volumes:
   - "/usr/local/docker/tomcat/webapps/test:/usr/local/tomcat/webapps/test"
  environment:
   TZ: Asia/Shanghai

代码语言:javascript
复制
# mysql
version: "3"
services:
 mysql:
  restart: always
  image:mysql
  container_name:mysql
  port:
   - 3306:3306
   environment:
    TZ:Asia/Shanghai
    MYSQL_ROOT_PASSWORD:123456
   command:
    --character-set-server=utf8mb4
    --collation-server=utf8mb4_general_ci
    --explicit_defaults_for_timestamp=true
    --lower_case_table_name=1
    --max_allowed_packet=128M
    --sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBST\
    ITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATA,ERROR_FOR_DIVISION_BY_ZERO"
   volumes:
    - mysql-data:/var/lib/mysql
  volumes:
   mysql-data: # docker安装目录/volumes/下创建mysql_mysql-data文件夹作为映射
   # /var/lib/docker/volumes/mysql_mysql-data

项目部署

代码语言:javascript
复制
mkdir project;cd project
vim docker-compose.yml
	version: 3
     services:
      tomcat:
       restart:always
       image:tomcat
       container_name:tomcat
       ports:
        - 8080:8080
       volumes:
        - /usr/local/docker/project/webapps/:/usr/local/tomcat/webapps/
       environment:
        TZ: Asia/Shanghai
      mysql:
       restart: always
       image:mysql
       container_name:mysql
       port:
        - "3306:3306"
       environment:
        TZ:Asia/Shanghai
        MYSQL_ROOT_PASSWORD:123456
       command:
        --character-set-server=utf8mb4
        --collation-server=utf8mb4_general_ci
        --explicit_defaults_for_timestamp=true
        --lower_case_table_name=1
        --max_allowed_packet=128M
        --sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SU\
      BSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATA,ERROR_FOR_DIVISION_BY_ZERO"
       volumes:
        - mysql-data:/var/lib/mysql
     volumes:
      mysql-data:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-12-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Docker
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档