ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[ docker ] 01 docker简单使用

2022-07-18 13:02:46  阅读:158  来源: 互联网

标签:容器 01 container image mysql 简单 run docker


Docker


轻量级 虚拟机 软件

核心概念: 容器(Container)-虚拟的计算机;镜像(Image) - 安装操作系统的光盘

可以基于镜像创造多个容器, 通过镜像创建带有操作系统的虚拟计算机

1.1 Start

1.1.1 run image/manage image/manage containers

流程: 镜像--docker run -> 容器

1 
docker run 镜像 # run the image
2
docker images # 查看本地的镜像
docker rmi 镜像名 # 删除镜像
3
docker ps # 查看正在运行的容器
docker ps -a # all containers
#CONTAINER ID   IMAGE     COMMAND     CREATED              STATUS                          PORTS     NAMES
#d1901a4540c2   alpine    "/bin/sh"   About a minute ago   Exited (0) About a minute ago             beautiful_booth
#the colume "name" is created randomly by docker.
docker rm container_id or NAMES(not the image name) #// delete a container
#we can put some argums into the container, like: when running 
# docker run hello_world, which actually put some argums in it
# it is the same with "docker run ubuntu echo 'hello world'"

镜像仓库:用来存储docker镜像, 默认使用官方的docker hub

每一个镜像有tag, 类似version, 可以在镜像后面添加tag制定版本 eg : docker run mysql:8.0


  • 官方镜像的格式:

    <repository>:<tag>

  • 私人镜像的格式: (自己创建的image,如果上传到docker hub中)

    <docker ID>/<repository>:<tag>

    eg: ImRoy/mysql and ImGroot/mysql

1.1.2 recap:

  1. run an image
docker run [options] <image name>| <id> [command]
eg: docker run -d hello-world # 前台不输出任何info
eg: docker run --name hello hello-world # 给容器指定name, ps的时候就会看见自定义的名字
  1. manage images
docker <subcommand> <image name>|<id>
docker images
docker rmi ubuntu
docker pull ubuntu # 和中央仓库的交互
docker push ubuntu # same as last line
  1. manage containers
docker <subcommand> <container name>|<id>
docker rm container_name
docker ps 
docker logs/start/stop container_names
# logs可以查看这个容器运行时的所有log

1.2 安装Mysql

1. 2. 1 运行image安装container

docker run mysql:5.7 
docker run -e MYSQL_ROOT_PASSWORD=1234 mysql:5.7 # e:environment assign environment variables
docker run -p 3306:3306 mysql:5.7 # 映射docker的端口到本机端口
docker run -d ... # 后台运行,前段不输出内容
docker run --name mysql ... # 指定容器名称

port map

1.2.2 持久化存储

独立于容器之外的持久化存储, 两种方式: Bind Mounting, Data Volume

Bind Mounting: 将localhost上的指定目录挂在到容器中

docker -v $PWD/data:/anypath... mysql:5.7

1.2.3 Docker 全局信息查看

查看

docker system info # 查看docker app的全局信息(有几个image, container etc.)
docker system df # 查看当前docker应用占据到磁盘信息,占用的size,cache etc.
docker container prume # 删除所有退出的container
docker volume prune # 删除未被使用的卷
docker image prune # 删除dangling状态和未被使用的镜像

1.3 Dockerfile 基本使用

构建自己的docker镜像


file中:使用的操作系统,需要预装的软件, 如何启动软件等

docker build: 把介质,jar包等编译成image

1.3.1 Demo 从springboot构建image

  1. 定义dockerfile文件

  2. 运行build命令


  1. 先把项目进行gradlew clean build 打包, 打包后的jar在build/libs/xxx.jar

  2. 项目目录下定义一个Dockerfile文件

# 要用的jdk8环境
FROM java:8
# 要复制包到镜像中,直接写在容器的根目录下,即(/app.jar)默认为linux系统
COPY build/libs/xxx.jar app.jar
# 容器启动时要执行的参数
ENTRYPOINT ["java", "-jar", "/app.jar"]
# 暴露端口(在端口映射中会被覆盖,意义不大)
EXPOSE 8080

最后的点

在项目目录的terminal下:

  1. 使用Dockerfile文件构建image:
docker build -t docker-image-name:1.0 . #-t为给这个构建的image一个tag,在后面指定为1.0, 
# 最后的‘点’, 指定在当前目录下寻找Dockerfile文件来执行

构建完成后,可以启动image:

  1. 使用image创建 container:
docker run --name image-to-container -d -p 8080:8080 docker-image-name:1.0

用名为docker-image-name 的image 创建一个名为image-to-container 的 container

docker ps 可以看到正在运行的container

使用docker logs image-to-container可以看到日志,比如项目是springboot项目,可以看到terminal的日志

使用docker logs -f image-to-container可以持续的follow镜像的日志,即持续观看日志内容

删除容器:

docker rm -f name 强制删除正在运行的容器

1.4 Docker Compose

单独启动的多个容器之间是独立的,无法进行数据访问

多容器应用 : 项目打包后,需要多个容器去支撑项目,可以把项目打包、容器的启动都写在一个文件中,对文件进行启动/停止。

前提条件: 项目已经gradlew build为jar包, 项目中有Dockerfile文件申明了image的格式


docker-compose up # 创建image&创建container
docker-compose down # 关闭container&删除container 

# 每次修改代码后的步骤: 
docker-compose down #关闭、删除 容器
./gradlew clean build # 重新打包
docker rmi app:1.0 #删除之前的镜像
docker-compose up # 创建新的image并创建container

文件: docker-compose.yml:

version: '3' # 配置yml文件的语法版本

services: # 在此docker container中启动两个组件(不准确的说法)
  app:
    build: . #构建当前项目目录
    image: app:1.0 #指定使用的image文件(是在项目中的jar包通过dockerFile打包好的)
    container_name: app #指定创建的子容器名称
    ports: #配置端口映射
      - '8080:8080'
    depends_on: #指定app需要在mysql容器启动后再进行启动
      - mysql
  mysql:#需要在spring配置中修改的数据库访问地址(localhost -> mysql)
    image: mysql:5.7
    container_name: mysql
    environment: #配置环境变量
      MYSQL_DATABASE: 'demo'
      MYSQL_PASSWORD: 'root'
    ports:
      - '3306:3306'
    volumes:#配置指定的持久化存储位置
      - '$PWD/data:/var/libs/mysql'

  1. 网络管理: docker-compose在启动时会创建一个网络,里面的应用(组件或者叫子容器)会使用自己的名字作为主机名,而不是localhost, 在使用compose时,需要修改之前的spring配置,比如:配置数据库时使用对localhost/3306需要修改为在docker-compose中配置的服务名mysql/3306

  2. 依赖管理: depends_on只能保证容器的启动顺序,在容器启动后,容器中的应用启动时间无法保证(app容器中有一个app.jar应用,mysql容器中有一个mysql服务,只能保证外面的容器顺序,不能保证应用的启动顺序)可以使用自己的脚本实现,检查mysql的3306端口是否启动

  3. docker-compose只构建image: 只构建image, 不创建container,使用docker-compose build

标签:容器,01,container,image,mysql,简单,run,docker
来源: https://www.cnblogs.com/Roy2048/p/16490036.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有