Docker入门(常用命令+实战)

目录

Docker介绍

什么是Docker

为什么要用Docker(好处)

安装Docker

第一步:安装

第二步:配置镜像加速器

Docker命令 

 服务相关命令

镜像相关命令

容器相关命令

Docker 数据卷

数据卷好处及作用

数据卷的使用

部署项目

部署Mysql

部署自己的应用

制作自己的镜像

部署启动


Docker介绍

什么是Docker

      Docker 是一种开源的容器化平台,能够帮助开发人员和系统管理员更方便地构建、打包、发布和运行应用程序。Docker 容器是一种轻量级的、独立的运行环境,通过 Docker,你可以在一个容器中打包应用程序所有的代码、依赖和配置文件,并将它们作为一个整体来进行部署和运行。

为什么要用Docker(好处)

  1. 轻量级:Docker 容器相对于传统的虚拟化技术如虚拟机来说,更为轻量级,启动时间更快,占用资源更少。

  2. 隔离性:每个 Docker 容器都是独立的,互不干扰,能保证应用程序之间的隔离性。

  3. 可移植性:Docker 容器可以在各种操作系统平台上运行,不受限于特定的硬件或操作系统。

  4. 灵活性:Docker 容器可以很容易地构建、复制、修改、删除和重新部署,同时也支持快速进行扩展和缩小。

  5. 一致性:由于 Docker 容器的打包方式是基于镜像的,因此可以确保应用程序在任何环境下的运行结果都是一致的。

  6. 方便性:通过 Docker,你可以快速创建各种开发、测试和生产环境,也能很方便地共享镜像文件和容器状态。

废话不多说,直接开始学习Docker

安装Docker

第一步:安装

注意:本人是在Centos7下安装的

#1、yum 包更新到最新
yum update

# 2、安装需要的软件包, yum-uti1 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的yum instal7 -y yum-utils device-mapper -persistent-data lvm2

#3、设置yum源
yum-config-manager --add-repo https://download.docker,com/1inux/centos/docker-ce.repo

#4、安装docker,出现输入的界面都按 Y
yum insta11 -y docker -ce

# 5、查看docker版本,验证是否验证成功
docker -v

 执行Docker -v  出现下图  就说明成功了

 

第二步:配置镜像加速器

在这里  我们才用阿里的镜像加速器

注意:每个人的是不一样的,须登录阿里云,

https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

#这是我自己的,登录阿里云获取
#执行如下命令  便可完成配置
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://kzmms6oz.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

Docker命令 

列出均为常用命令,全部命令请去官方文档查看

 服务相关命令


systemotl start docker  //启动docker服务

systemetl stop docker  //停止docker服务

systemctl restart docker  //重启docker服务

systemotl status docker  //查看docker服务状态
  • 镜像相关命令

  • 拉取镜像
docker pull [options] NAME[:TAG] 

//示例  拉取mysql镜像  docker pull mysql:5.7

name是拉取镜像的名称,:TAG表示是可选的,如果不选表明时latest(最新版本),如果选择表明是指定版本的.options是拉去的一些参数.

  •   查看所有镜像
docker images

  •  删除镜像
docker  rmi 镜像id/镜像名称

容器相关命令

docker run <镜像名>[:<标签>]   //基于指定镜像创建并启动一个容器。

docker ps  //列出当前正在运行的容器列表。

docker ps -a  // 列出所有容器

docker start <容器ID或名称>  //启动已停止的容器。

docker restart <容器ID或名称>  //重新启动容器。

docker stop <容器ID或名称>  //停止正在运行的容器。

docker rm <容器ID或名称>  //删除指定的容器

Docker 数据卷

数据卷好处及作用

  1. 数据持久化:容器在运行过程中产生的数据会保存在数据卷中,即使容器被删除或重新创建,数据仍然存在。这为数据的持久化存储提供了便利,确保数据不会丢失。

  2. 数据共享:多个容器可以使用同一个数据卷,实现数据共享。这在微服务架构中尤为有用,不同的服务可以共享数据,方便数据的交互和共享状态。

  3. 数据备份和恢复:通过将数据卷挂载到本地主机上,可以轻松地对数据进行备份,以便日后恢复或迁移。数据卷可以与宿主机上的目录进行映射,方便进行数据的管理和操作。

  4. 共享配置和日志:通过将配置文件和日志文件挂载到数据卷,可以实现容器之间的配置共享和日志的收集与分析。这样可以方便地集中管理和监控容器的配置和日志信息。

  5. 跨主机数据传输:使用 Docker 数据卷可以方便地实现容器之间和主机之间的数据传输。数据卷可以通过网络或存储卷插件在不同的 Docker 主机之间进行数据共享和传输。

数据卷的使用

 创建容器时,使用-v参数设置数据卷

docker run .... -v 宿主机目录(文件):容器内目录(文件)

注意事项: 

  1. 目录必须是绝对路径
  2. 如果目录不存在,则会自动创建
  3. 可以挂载多个数据卷

部署项目

部署Mysql

  1. 拉去MySQL镜像
 docker pull mysql:5.7

  2  创建容器,设置端口映射、数据卷挂载

# 在/root目录下创建mysq1目录用于存储mysq1数据信息
mkdir ~/mysql
cd ~/mysql


#启动运行容器
docker run -id  \
-p 3307:3306 \
--name=c_mysq7 \
-v $pwd/conf:/etc/mysql/conf.d \
-v $PWd/logs:/logs \
-v $pwd/data: /var/lib/mysql \
-e MYSQL_ROOT_PASSWORD-123456 \
mysql:5.7

命令说明: 

  • - id:以交互方式运行容器,并将容器设置为后台模式运行。
  • - p  3307:3306:将容器的 MySQL 服务端口 3306 映射到主机的端口 3307,允许通过主机的 3307 端口访问容器内的 MySQL 服务。
  • - - name=c_mysql:给容器起一个名称为 "c_mysql",方便后续管理和操作。
  • -v  $pwd/conf:/etc/mysql/conf.d :将主机当前目录下的 "conf" 目录挂载到容器的 "/etc/mysql/conf.d" 目录,用于加载 MySQL 配置文件。
  • -v $PWd/logs:/logs:将主机当前目录下的 "logs" 目录挂载到容器的 "/logs" 目录,用于存储 MySQL 日志文件。
  • -v $pwd/data: /var/lib/mysql :将主机当前目录下的 "data" 目录挂载到容器的 "/var/lib/mysql" 目录,用于持久化存储 MySQL 数据文件。
  • -e MYSQL_ROOT_PASSWORD-123456:设置 MySQL 的 root 用户密码为 "123456"。
  • mysql:5.7:从 Docker Hub 下载并运行标签为 "5.7" 的 MySQL 镜像。

至此Mysql容器创建成功

3.进入容器

docker run  -it C-mysql /bin/bash

4.登录Mysql

mysql -uroot -p123456

5测试

至此MySQL 部署完成

部署自己的应用

制作自己的镜像

在部署 mysql 的时候  我们拉取的是别人写好的官方镜像,在这里我们部署自己的应用,需要制作自己的镜像

 dockerfile 就是一个制作镜像的 纯文本文件

 制作镜像前我们先了解下常见命令

关键宁作用备注
FROM指定父镜像指定dockerfile基于那个image构建
MAINTAINER作者信息用来标明这个dockerfile谁写的
LABEL标签用来标明dockerfile的标签 可以使用Label代替Maintainer 最终都是在docker image基本信息中可以查看
RUN执行命令执行一段命令默认是/bin/sh 格式: RUN command 或者 RUN["command","param1","param2"]
CMD容器启动命提供启动容器时候的默认命令 和ENTRYPOINT配合使用.格式 CMDcommand param1 param2 或老CMD ["command','"param1","param2]
ENTRYPOINT入口般在制作一些执行就关闭的容器中会使用
COPY复制文件build的时候复制文件到image中
ADD添加文件build的时候添加文件到image中 不仅仅局限于当前build上下文 可以来源于远程服务
ENV环境变星指定build时候的环境变量 可以在启动的容器的时候 通过-e夏盖 格式ENVname=value
ARG构建参数构建参数 只在构建的时候使用的参数 如果有ENV 那么ENV的相同名字的值始终覆盖arg的参数
VOLUME定义外部可以挂载的数据卷指定build的image那些目录可以启动的时候挂载到文件系统中 启动容器的时候使用 -v 绑定格式 VOLUME[“目录”]
EXPOSE暴露端口定义容器运行的时候监听的端口 启动容器的使用-p来绑定暴露端口 格式EXPOSE 8080 或者EXPOSE 8080/udp
WORKDIR工作目录指定容器内部的工作目录 如果没有创建则自动创建 如果指定/使用的是绝对地址 如果不是/开头那么是在上一条workdir的路径的相对路径
USER指定执行用户指定build或者启动的时候 用户 在RUN CMD ENTRYPONT执行的时候的用户
HEALTHCHECK健康检查指定监测当前容器的健康监测的命令 基本上没用 因为很多时候 应用本身有健康监测机制
ONBUILD触发器当存在ONBUILD关键字的镜像作为基础镜像的时候 当执行FROM完成之后 会执行 ONBUILD的命令 但是不影响当前镜像 用处也不怎么大
STOPSIGNAL发送信号量到宿主机该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出
SHELL指定执行脚
本的shell
指定RUN CMD ENTRYPOINT 执行命令的时候使用的shell

第一步:编辑Dockerfile 文件

#使用 openjdk:8-jdk 作为基础镜像。
FROM openjdk:8-jdk

#在容器内创建 /tmp 目录,并将工作目录设置为 /opt/app
VOLUME /tmp
WORKDIR /opt/app

#复制当前目录下的所有 .jar 文件到容器的 app.jar 文件中,
#并复制 application-prod.yml 文件到容器中。
ARG JAR_FILE=*.jar
COPY ${JAR_FILE} app.jar
COPY application-prod.yml application-prod.yml

#设置环境变量 JAVA_OPTS 为空字符串,声明容器将会监听 8080 端口
ENV JAVA_OPTS=""
EXPOSE 8080

#将java 命令作为容器的入口点,通过执行指定的命令来启动 Java 应用程序。其中,${JAVA_OPTS} 是可选的环境变量,可以在运行容器时指定额外的 JVM 参数。-Djava.security.egd=file:/dev/./urandom 是一个常见的 JVM 参数,用于改善随机数生成性能。
ENTRYPOINT java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar /opt/app/app.jar

第二步:构建镜像

docker build -t yshop:app1.0.0 .

部署启动

docker run -d -p 8771:8080 \
    --user 1003:root \
    --network app -hyshop-app \
    -v /opt/docker-data/yshop/files/upload:/app/file \
    -v /opt/docker-data/yshop/files/avatar:/app/avatar \
    -v /opt/docker-data/yshop/logs:/opt/app/logs \
    -e "SPRING_PROFILES_ACTIVE=prod" \
    -e TZ="Asia/Shanghai" \
    --name yshop-app1.0.0 yshop:app1.0.0


docker logs -f --tail 200 yshop-app1.0.0

致此  项目部署完成

希望对你们有帮助 ,有不足之处希望大家多多指正.谢谢大家

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值