Docker 入门

Docker 入门

基础

不同操作系统下其安装包、运行环境是都不相同的!如果是手动安装,必须手动解决安装包不同、环境不同的、配置不同的问题

而使用Docker,这些完全不用考虑。就是因为Docker会自动搜索并下载MySQL。注意:这里下载的不是安装包,而是**镜像(image)镜像中不仅包含了MySQL本身,还包含了其运行所需要的环境、配置、系统级函数库。因此它在运行时就有自己独立的环境,就可以跨系统运行,也不需要手动再次配置环境了。这套独立运行的隔离环境我们称为容器(container)**

💡 Docker安装软件的过程,就是自动搜索下载镜像,然后创建并运行容器的过程

Docker本身包含一个后台服务,我们可以利用Docker命令告诉Docker服务,帮助我们快速部署指定的应用。Docker服务部署应用时,首先要去搜索并下载应用对应的镜像,然后根据镜像创建并允许容器,应用就部署完成

在这里插入图片描述

docker run -d \--name mysql \-p 3306:3306 \-e TZ=Asia/Shanghai \-e MYSQL_ROOT_PASSWORD=123 \mysql

解读:

  • docker run -d :创建并运行一个容器,d则是让容器以后台进程运行
  • -name mysql : 给容器起个名字叫mysql,你可以叫别的
  • p 3306:3306 : 设置端口映射。
    • 容器是隔离环境,外界不可访问。但是可以将宿主机端口映射容器内到端口,当访问宿主机指定端口时,就是在访问容器内的端口了。
    • 容器内端口往往是由容器内的进程决定,例如MySQL进程默认端口是3306,因此容器内端口一定是3306;而宿主机端口则可以任意指定,一般与容器内保持一致。
    • 格式: p 宿主机端口:容器内端口,示例中就是将宿主机的3306映射到容器内的3306端口
  • e TZ=Asia/Shanghai : 配置容器内进程运行时的一些参数
    • 格式:e KEY=VALUE,KEY和VALUE都由容器内进程决定
    • 案例中,TZ=Asia/Shanghai是设置时区;MYSQL_ROOT_PASSWORD=123是设置MySQL默认密码
  • mysql : 设置镜像名称,Docker会根据这个名字搜索并下载镜像
    • 格式:REPOSITORY:TAG,例如mysql:8.0,其中REPOSITORY可以理解为镜像名,TAG是版本号
    • 在未指定TAG的情况下,默认是最新版本,也就是mysql:latest

Docker 常见命令

命令说明文档地址
docker pull拉取镜像https://docs.docker.com/engine/reference/commandline/pull/
docker push推送镜像到DockerRegistryhttps://docs.docker.com/engine/reference/commandline/push/
docker images查看本地镜像https://docs.docker.com/engine/reference/commandline/images/
docker rmi删除本地镜像https://docs.docker.com/engine/reference/commandline/rmi/
docker run创建并运行容器(不能重复创建)https://docs.docker.com/engine/reference/commandline/run/
docker stop停止指定容器https://docs.docker.com/engine/reference/commandline/stop/
docker start启动指定容器https://docs.docker.com/engine/reference/commandline/start/
docker restart重新启动容器https://docs.docker.com/engine/reference/commandline/restart/
docker rm删除指定容器https://docs.docker.com/engine/reference/commandline/rm/
docker ps查看容器https://docs.docker.com/engine/reference/commandline/ps/
docker logs查看容器运行日志https://docs.docker.com/engine/reference/commandline/logs/
docker exec进入容器https://docs.docker.com/engine/reference/commandline/exec/
docker save保存镜像到本地压缩文件https://docs.docker.com/engine/reference/commandline/save/
docker load加载本地压缩文件到镜像https://docs.docker.com/engine/reference/commandline/load/
docker inspect查看容器详细信息https://docs.docker.com/engine/reference/commandline/inspect/

在这里插入图片描述

💡 docker run 相当于 docker create 和 docker start,启动镜像时不要使用 docker run

Nginx为例演示上述命令

# 第1步,去DockerHub查看nginx镜像仓库及相关信息# 第2步,拉取Nginx镜像
docker pull nginx# 第3步,查看镜像
docker images
# 结果如下:
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx        latest    605c77e624dd   16 months ago   141MB
mysql        latest    3218b38490ce   17 months ago   516MB# 第4步,创建并允许Nginx容器
docker run -d --name nginx -p 80:80 nginx# 第5步,查看运行中容器
docker ps
# 也可以加格式化方式访问,格式会更加清爽
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"# 第6步,访问网页,地址:http://虚拟机地址# 第7步,停止容器
docker stop nginx# 第8步,查看所有容器
docker ps -a --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"# 第9步,再次启动nginx容器
docker start nginx# 第10步,再次查看容器
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"# 第11步,查看容器详细信息
docker inspect nginx# 第12步,进入容器,查看容器内目录
docker exec -it nginx bash
# 或者,可以进入MySQL
docker exec -it mysql mysql -uroot -p# 第13步,删除容器
docker rm nginx
# 发现无法删除,因为容器运行中,强制删除容器
docker rm -f nginx

给常用Docker命令起别名,方便访问:

# 修改/root/.bashrc文件
vi /root/.bashrc
内容如下:
# .bashrc# User specific aliases and functionsalias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias dps='docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"'
alias dis='docker images'# Source global definitions
if [ -f /etc/bashrc ]; then. /etc/bashrc
fi

数据卷

容器提供程序的运行环境,但是程序运行产生的数据、程序运行依赖的配置都应该与容器解耦

数据卷(volume)是一个虚拟目录,是容器内目录宿主机目录之间映射的桥梁

在这里插入图片描述

在上图中:

  • 我们创建了两个数据卷:confhtml
  • Nginx容器内部的conf目录和html目录分别与两个数据卷关联。
  • 而数据卷conf和html分别指向了宿主机的/var/lib/docker/volumes/conf/_data目录和/var/lib/docker/volumes/html/_data目录

这样以来,容器内的confhtml目录就 与宿主机的confhtml目录关联起来,我们称为挂载。此时,我们操作宿主机的/var/lib/docker/volumes/html/_data就是在操作容器内的/usr/share/nginx/html/_data目录。只要我们将静态资源放入宿主机对应目录,就可以被Nginx代理了

💡 /var/lib/docker/volumes这个目录就是默认的存放所有容器数据卷的目录,其下再根据数据卷名称创建新目录,格式为/数据卷名/_data

为什么不让容器目录直接指向宿主机目录呢

  • 因为直接指向宿主机目录就与宿主机强耦合了,如果切换了环境,宿主机目录就可能发生改变了。由于容器一旦创建,目录挂载就无法修改,这样容器就无法正常工作了
  • 但是容器指向数据卷,一个逻辑名称,而数据卷再指向宿主机目录,就不存在强耦合。如果宿主机目录发生改变,只要改变数据卷与宿主机目录之间的映射关系即可
  • 一般数据卷目录比较深,不好寻找,通常让容器直接与宿主机目录挂载而不使用数据卷

数据卷的相关命令有:

命令说明文档地址
docker volume create创建数据卷https://docs.docker.com/engine/reference/commandline/volume_create/
docker volume ls查看所有数据卷https://docs.docker.com/engine/reference/commandline/volume_ls/
docker volume rm删除指定数据卷https://docs.docker.com/engine/reference/commandline/volume_prune/
docker volume inspect查看某个数据卷的详情https://docs.docker.com/engine/reference/commandline/volume_inspect/
docker volume prune清除数据卷https://docs.docker.com/engine/reference/commandline/volume_prune/

容器与数据卷的挂载要在创建容器时配置,对于创建好的容器,是不能设置数据卷的。而且创建容器的过程中,数据卷会自动创建

数据卷的目录结构较深,如果操作数据卷目录会不太方便。在很多情况下,会直接将容器目录与宿主机指定目录挂载。挂载语法与数据卷类似:

# 挂载本地目录
-v 本地目录:容器内目录
# 挂载本地文件
-v 本地文件:容器内文件

💡 本地目录或文件必须以 /./开头,如果直接以名字开头,会被识别为数据卷名而非本地目录名

-v mysql:/var/lib/mysql # 会被识别为一个数据卷叫mysql,运行时会自动创建这个数据卷
-v ./mysql:/var/lib/mysql # 会被识别为当前目录下的mysql目录,运行时如果不存在会创建目录

参考

黑马程序员Docker快速入门到项目部署,MySQL部署+Nginx部署+docker自定义镜像+DockerCompose项目实战

day02-Docker — 张虎翼

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/264877.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

苏州数字孪生技术推进制造业升级,工业物联网可视化应用加速

苏州数字孪生技术推进制造业升级,工业物联网可视化应用加速。以新一代信息技术与制造业融合发展为赋能主线,聚焦苏州工业制造业产业链数字化转型需求,引领带动制造业数字化转型实现提效、提速、提质,推动产业数字化、数字产业化协…

AOSP开机动画调测技术点(基于Android13)

AOSP开机动画调测技术点(基于Android13) 开机动画替换 首先,在你的计算机上创建一个名为"bootanimation"的文件夹,并将"part0"、"part1"和"desc.txt"这三个文件复制到该文件夹中。这些文件包含了开机动画的图像…

人工智能在安全领域的应用

ChatGPT 等 AI 应用在网络安全领域的应用效果明显,其自动编程能力、分析能力及自身集成的知识库能够帮助网络安全从业者提升工作效率,改进组织的网络安全计划。 (一)代码生成与检测能力 可用于开发漏洞挖掘工具。如目前可以利用…

表单标签的介绍与使用(有实现案例)

表单便签的作用: 主要是用于收集用户数据 在我们网页中, 我们也需要跟用户进行交互,收集用户资料,此时就需要表单。 表单的组成 表单:表单域,表单控件和提示信息3部分组成 表单域 表单域是一个包含表单…

docker-ubuntu中基于keepalived+niginx模拟主从热备完整过程

一、环境准备 🔗在Ubuntu中安装docker 二、主机 1、环境搭建 1.1 镜像拉取 docker pull ubuntu:16.041.2 创建网桥 docker network create -dbridge --subnet192.168.126.0/24 br11.3 启动容器 docker run -it --name ubuntu-1 --privileged -v /home/vac/l…

题目:肖恩的乘法表(蓝桥OJ 3404)

题目描述&#xff1a; 解题思路&#xff1a; 本题采用二分中的二分答案。且本题check()用不到开数组&#xff0c;所以不需要开数组&#xff0c;脑海中想象一个数组就好了 题解&#xff1a; #include<bits/stdc.h> using namespace std; using ll long long;ll n, m , k…

2022年6月电子学会青少年软件编程 中小学生Python编程等级考试二级真题解析(判断题)

2022年6月Python编程等级考试二级真题解析 判断题(共10题,每题2分,共20分) 26、打印结果最后的数是10.0 a=0 while a<10: a+=0.5print(a,end=" ") 答案:对 考点分析:考查python综合知识,循环结束条件是a<10,所以最后一次进入循环时a的值为9.5,然…

Android系统启动过程-uBoot+Kernel+Android

摘要&#xff1a;本文是参考大量网上资源在结合自己查看源代码总结出来的&#xff0c;让自己同时也让大家加深对Android系统启动过程有一个更加深入的了解&#xff01;再次强调&#xff0c;本文的大多数功劳应归功于那些原创者们&#xff0c;同时一些必要的参考链接我会一一附上…

Bluejay--控制多旋翼无刷电机的数字 ESC 固件

前言 Bluejay中文意思是冠蓝鸦&#xff0c;一种雀形目鸦科冠蓝鸦属的鸟类。在这里是用于控制多旋翼无刷电机的数字 ESC 固件。 基于BLHeli_S修订版 16.7 Bluejay 的目标是成为 BLHeli_S 的开源继承者&#xff0c;通过 Busy Bee MCU 对 ESC 进行多项改进。 特点 数字信号协议&…

SpringBoot整合RocketMQ,高手都是这么玩的!

今天我们来讨论如何在项目开发中优雅地使用RocketMQ。本文分为三部分&#xff0c;第一部分实现SpringBoot与RocketMQ的整合&#xff0c;第二部分解决在使用RocketMQ过程中可能遇到的一些问题并解决他们&#xff0c;第三部分介绍如何封装RocketMQ以便更好地使用。 1. SpringBoo…

Git篇---第二篇

系列文章目录 文章目录 系列文章目录前言一、什么是 Git 中的“裸存储库”?二、Git 是用什么语言编写的?三、在Git中,你如何还原已经 push 并公开的提交?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文…

4.AppGallery Connect通过AGC申请证书-应用程序签名与真机调试

1.提前申请华为开发者账号&#xff1a; 华为开发者论坛https://developer.huawei.com/consumer/cn/forum/home 2.生成秘钥库文件 Password必须包含大小写与特殊字符&#xff0c;长度大于8 3.选择保存的路径 4.打开AppGallery Connect AppGallery Connect通过AGC申请证书 5.证…