docker

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: -

https://labs.play-with-docker.com/
web端做实验,不用本地安装,每次4小时

-----------------------------------------------

参照B站视频教程而写, 方便大家学习使用

课程

  1. 【docker入门】10分钟,快速学会docker
  2. 【docker入门2】实战~如何组织一个多容器项目docker-compose
  3. 【Docker】Dockerfile用法全解析
  4. 【kubernetes入门】快速了解和上手容器编排工具k8s

文档

https://blog.csdn.net/wantaway314/category_11020345.html

评论区笔记

  • 安装和常用CLI:
  • 添加阿里云镜像:sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  • 安装命令:sudo yum install -y  docker-ce docker-ce-cli containerd.io
  • 启动命令:sudo systemctl start docker
  • 添加当前用户到docker用户组:sudo usermod -aG docker $USER (需注销),newgrp docker (立即生效)
  • Helloworld:docker run hello-world  (本地没有镜像的话会自动从远端仓库pull)
  • pull nginx 镜像:docker pull nginx(等效于nginx:latest)
  • 运行:docker run -【d】(后台运行不阻塞shell) 【-p 80:80】(指定容器端口映射,内部:外部) nginx
  • 查看正在运行:docker ps
  • 删除容器:docker rm -f <container id(不用打全,前缀区分)>
  • 进入bash:docker exec -it <container id(不用打全,前缀区分)> bash
  • commit镜像:docker commit <container id(不用打全,前缀区分)>  <name>
  • 查看镜像列表:docker images (刚才commit的镜像)
  • 使用运行刚才commit的镜像:docker run -d <name>
  • 使用Dockerfile构建镜像:docker build -t <name> <存放Dockerfile的文件夹>
  • 删除镜像:docker rmi <name>
  • 保存为tar:docker save <name> > <tar name>
  • 从tar加载:docker load < <tar name>
  • 一些启动参数:
  • 后台运行容器:-d
  • 容器内外端口映射:-p 内部端口号:外部端口号
  • 目录映射:-v 'dir name' : <dir>
  • 指定映像版本:<name>:<ver>

镜像是不能运行的,是静态的,而容器是可以运行的,是动态的。

CONTAINER容器


# 下载nginx

docker pull nginx

# 查看本地镜像

docker images

# -d让后台运行不阻塞shell指定窗口-p制定内外端映射

docker run nginx

docker run -d -p 80:80 nginx

# 查看正在运行的容器

docker ps

# 进入容器

docker exec -it id号 bash

下载nginx镜像

# 镜像拉取 如nginx

docker pull nginx

docker pull nginx:latest

查看本地镜像

docker images

移除镜像

需要把容器先删除

# 先移除容器docker rm -f 容器id

docker rmi 镜像名


# 删除所有<none>------反复build导致的

docker rmi `docker images | grep  '<none>' | awk '{print $3}'`

创建容器,运行容器

# 创建容器,运行容器,后台运行,端口映射,命名

docker run -d -p 80:80 nginx

  • # run
  • -d
  • -dit
  • --link 域名 --link(容器互联)官方不建议使用,推荐network。
  • -p 80:80
  • --name mynginx
  • -v `pwd`:/路径
  • 镜像名:latest

----------------------------

数据管理(未完)

1. 数据卷

数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:

  • 数据卷可以在容器之间共享和重用
  • 对数据卷的修改会立马生效
  • 对数据卷的更新,不会影响镜像
  • 卷会一直存在,直到没有容器使用 *数据卷的使用,类似于 Linux 下对目录或文件进行 mount。

创建一个数据卷

在用 docker run 命令的时候,使用 -v 标记来创建一个数据卷并挂载到容器里。在一次 run 中多次使用可以挂载多个数据卷。创建一个 web 容器,并加载一个数据卷到容器的 /webapp 目录。

docker run -d -P --name web -v /webapp training/webapp python app.py

挂载一个主机目录作为数据卷

挂载一个本地主机文件作为数据卷

2. 数据卷容器

如果你有一些持续更新的数据需要在容器之间共享,最好创建数据卷容器。

数据卷容器,其实就是一个正常的容器,专门用来提供数据卷供其它容器挂载的。

3. 利用数据卷容器来备份、恢复、迁移数据卷

网络


----------------------------

停止容器

# 创建容器之后,停止nginx02容器

docker stop 容器id

# 启动已存在容器nginx02

docker start 容器id

查看容器

docker ps

进入容器

# bash进入容器

docker exec -it 容器id bash

# 退出容器

exit

查看并修改文件

# 查看当前路径文件

ls

# 查看网页内容

cat index.html

# 修改

echo hello,docker > index.html

移除容器

# 删除容器

docker rm -f 容器id

----------------------------------

从容器创建一个新的镜像

docker commit 容器id 镜像名字

报错

# 原因:需要先有容器id,不能随便写数

Error response from daemon: No such container: 92

启动容器

docker run -d -p 90:80 m1

通过Dockerfile建立镜像跑容器

Dockerfile 由一行行命令语句组成,并且支持以 # 开头的注释行。
一般的,Dockerfile 分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。

1.建立Dockerfile文件

vim Dockerfile

#  FROM nginx

#  ADD ./ /usr/share/nginx/html/

2.编写外部文件

vim index.html

# dockerfile is this

3.构建镜像

# m2是容器名,点表示当前目录下寻找Dockerfile文件去构建镜像

docker build -t m2 .

4.跑容器

docker run -d -p 100:80 m2

save构建镜像

1.存出镜像

docker save m2 >1.tar

2.载入镜像

docker load < 1.tar

使用docker load的时候会出现如下错误

open /var/lib/docker/tmp/docker-import-3061451168/repositories: no such file or directory

解决方法

cat 1.tar|sudo docker import - 镜像名

组织多容器的一个多容器项目docker-compose

link映射

# 启动容器

docker run -d -p 80:80 --name mynginx nginx

# 查看容器

docker ps

# 进入容器

docker exec -it mynginx bash

# 查看网络配置ip

cat /etc/hosts

# linux系统

docker run -dit alpine


# 进入容器

docker exec -it xxxx(容器id)

# 下载curl用来请求 Web 服务器

apk add curl

#请求

curl 172.17.0.2

设置域名(其他步骤一致)

从下往上写,用link进行映射

这样对运维来说太麻烦了,有什么好方法吗?docker-compose

docker-compose

按照nginx -> php -> mysql实现

项目结构

hello-docker-compose

   |-- conf

       |-- nginx.conf      // nginx配置文件

   |-- html

       |-- index.html      // nginx首页

       |-- test.php        // 访问 php info服务

       |-- mysql.php       // 访问 mysql

   |-- docker-compose.yml  // docker-compose 主配置文件

nginx.conf

worker_processes  1;


events {

   worker_connections  1024;

}

http {                                                  

   include       mime.types;

   default_type  application/octet-stream;


   sendfile        on;


   keepalive_timeout  65;

   server {

       listen       80;

       server_name  localhost;


       location / {

           root   /usr/share/nginx/html;

           index  index.html index.htm;

       }


       error_page   500 502 503 504  /50x.html;

       location = /50x.html {

           root   /usr/share/nginx/html;

       }


       location ~ \.php$ {                    

           fastcgi_pass    php:9000;

           fastcgi_index   index.php;

           fastcgi_param   SCRIPT_FILENAME     /var/www/html/$fastcgi_script_name;    

           include         fastcgi_params;

       }

   }

}

index.html

hello docker-compose !

test.php

<?php

$dbhost = 'mysql';

$dbuser = 'root';

$dbpass = '123456';

$conn = mysqli_connect($dbhost, $dbuser, $dbpass);

if (!$conn) {

die('could not connect! ' . mysqi_error());

}

echo 'connect success! ';

mysqli_close($conn);


?>

mysql.php

<?php

phpinfo();

?>

docker-compose.yml

version: "3"

services:

 nginx:

   image: nginx:alpine

   ports:

   - 80:80

   volumes:

   - ./html:/usr/share/nginx/html

   - ./conf/nginx.conf:/etc/nginx/nginx.conf

 php:

   image: devilbox/php-fpm:8.0-work-0.106

   volumes:

   - ./html:/var/www/html

 mysql:

   image: mysql:5.6

   environment:

   - MYSQL_ROOT_PASSWORD=123456

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
Docker 容器
如何通过pid定位是哪个容器
如何通过pid定位是哪个容器
317 0
|
前端开发 jenkins 持续交付
新的centos7.9安装docker版本的jenkins2.436.1最新版本-前端项目发布(五)
新的centos7.9安装docker版本的jenkins2.436.1最新版本-前端项目发布(五)
307 1
|
5月前
|
人工智能 前端开发 Java
十几行代码实现 Manus,Spring AI Alibaba Graph 快速预览
Spring AI Alibaba Graph 的核心开发已完成,即将发布正式版本。开发者可基于此轻松构建工作流、智能体及多智能体系统,功能丰富且灵活。文章通过三个示例展示了其应用:1) 客户评价处理系统,实现两级问题分类与自动处理;2) 基于 ReAct Agent 的天气预报查询系统,循环执行用户指令直至完成;3) 基于 Supervisor 多智能体的 OpenManus 实现,简化了流程控制逻辑并优化了工具覆盖度。此外,还提供了运行示例的方法及未来规划,欢迎开发者参与贡献。
|
9月前
|
安全 持续交付 Docker
Docker
Docker 是一种非常有前途的技术,它为应用程序的开发、部署和管理带来了极大的便利,相信在未来会发挥更加重要的作
|
11月前
|
缓存 安全 Linux
docker镜像管理问题
【10月更文挑战第3天】
225 1
|
人工智能 分布式计算 数据处理
Big Data for AI实践:面向AI大模型开发和应用的大规模数据处理套件
文叙述的 Big Data for AI 最佳实践,基于阿里云人工智能平台PAI、MaxCompute自研分布式计算框架MaxFrame、Data-Juicer等产品和工具,实现了大模型数据采集、清洗、增强及合成大模型数据的全链路,解决企业级大模型开发应用场景的数据处理难题。
|
9月前
|
弹性计算 移动开发 安全
阿里云域名注册、续费收费标准价格表及最新优惠口令获取及使用教程参考
阿里云域名注册和续费收费标准在9月份随着全球域名价格的上涨,域名收费标准也做了调整,目前阿里云的.com英文域名的注册价格为83元,续费收费标准为90元,为了让更多用户在注册和续费时价格能更加实惠,阿里云推出了域名优惠口令活动,域名优惠口令适合在域名注册和续费时使用,使用优惠口令通常可以使注册和续费价格减免几元到十几元不等,例如使用优惠口令续费.com域名就可减少5元。本文为大家展示目前阿里云域名注册和续费的最新收费标准以及如何领取和使用域名优惠口令的相关教程,以供参考。
2400 11
|
11月前
|
Dart IDE 开发工具
鸿蒙Flutter实战:09-现有Flutter项目支持鸿蒙
本文介绍了将现有Flutter项目适配鸿蒙系统的步骤。首先,根据[鸿蒙Flutter适配指南]搭建开发环境,并使用fvm管理多版本SDK。项目采用模块化设计,包括apps、common、components、modules和plugins等目录,分别对应不同功能模块。重点在于在apps目录下创建新的鸿蒙项目,逐步添加依赖并解决版本兼容性问题。最后,通过配置pubspec.yaml文件和特定插件的鸿蒙化适配,完成项目的编译与运行测试。
819 0
|
NoSQL 关系型数据库 MySQL
Docker基础篇
🍅程序员小王的博客:程序员小王的博客 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕 🍅Docker博客参考资料:Docker官网,中文网,编程不良人等
347 0
Docker基础篇
|
应用服务中间件 编译器 Linux
nginx 安装
nginx 安装
485 1
nginx 安装