docker

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: -

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

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
7月前
|
监控 应用服务中间件 nginx
|
7月前
|
Linux Go 开发者
Docker(一):认识Docker
Docker(一):认识Docker
|
7月前
|
应用服务中间件 nginx Docker
Docker的世界
Docker的世界
50 0
|
Linux 应用服务中间件 虚拟化
初识Docker
初识Docker
|
Java Linux 虚拟化
|
存储 关系型数据库 Linux
|
JSON API 数据格式
docker详解
docker详解
95 0
|
存储 缓存 Shell
docker 从 0 到 1
容器技术对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此称为容器。Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。
106 0
|
Linux 测试技术 持续交付
Docker(一):什么是Docker?
Docker(一):什么是Docker?
164 0
Docker(一):什么是Docker?
|
Java Linux Shell
Docker必知必会
Docker必知必会
191 0