【云计算•云原生】3.一小时熟练掌握docker容器

文章目录

  • docker简介
  • ubuntu下安装docker
  • kali下安装docker
  • docker基本命令
  • docker搭建mysql、nginx、redis
  • 容器/镜像打包
  • 搭建私有镜像仓库
  • docker网络管理
  • Dockerfile文件
  • docker-compose.yml
    • 示例:搭建lamp

docker简介

docker是一个开源的应用容器引擎,可以让开发人员把编写好的代码和运行代码所需要的环境打包进一个容器里,通过移植容器可以避免多次搭建环境以及代码在一台机器上可以运行而到了另一台机器上因环境问题报错。

区分镜像和容器
用户基于镜像来运行容器,可以把镜像和容器类比成类和对象

docker、dockerfile与docker-compose区别
docker是一个可以基于镜像创建容器的软件
dockerfile把手工安装docer镜像的过程变成一个配置文件脚本,以后只需要运行这个文件就可获得所需环境
docker-compose用于编排容器。通过编辑docker-composer.yml配置文件,可以一个命令启动多个需要不同参数配置的容器

docker和虚拟机的区别

简单来说docker不需要一个单独的客户机操作系统,而是借助了宿主机。(应该是这样)
在这里插入图片描述

ubuntu下安装docker

ubuntu下安装docker,一条命令即可
curl -sSL https://get.daocloud.io/docker | sh

镜像加速,去阿里云拿加速地址
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

 $ sudo mkdir -p /etc/docker
 $ vim /etc/docker/daemon.json
 # 加入以下代码
 {
   "registry-mirrors": ["加速器地址"]
 }
 
 $ sudo systemctl daemon-reload
 $ sudo systemctl restart docker

kali下安装docker

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
echo 'deb https://download.docker.com/linux/debian stretch stable'> /etc/apt/sources.list.d/docker.list
如果显示没有权限,就运行下面这条命令
echo "deb https://download.docker.com/linux/debian stretch stable"  | sudo tee -a /etc/apt/sources.list.d/docker.list
apt-get install apt-transport-https  ca-certificates  curl  gnupg2  software-properties-common
sudo apt-get update
sudo apt install docker.io
如果报错用下面这条命令
apt-get install docker-ce
docker --version

docker基本命令

重启dockersystemctl restart docker

停止运行dockersystemctl stop docker

查看版本:docker version

列出本地的镜像:docker images

查找镜像:例docker search ubuntu

拉取镜像:docker pull 镜像名[:版本]

删除镜像:docker rmi ubuntu

创建交互式容器:docker run -i -t --name=name1 centos /bin/bash

-i:交互式容器
-t:tty终端
-d:守护式容器
–name:指定容器名称

查看正在运行的容器:docker ps

查看运行过的容器:docker ps -a

查看最后一次运行的容器:docker ps -l

退出当前容器:exit

创建守护式容器(不会自动登录进去):docker run -di --name=运行后的名字 镜像名字

登录进去docker exec -it 正在运行的容器名字 /bin/bash

ctrl+p+q退出容器,但不关闭

创建容器并登录进去:docker run -it --name=运行后的名字 镜像名字 /bin/bash

也可以用docker attach 容器名

attach 不会在容器中创建进程执行额外的命令,只是附着到容器上.
exec 会在运行的容器上创建进程执行新的命令。

停止运行容器:docker stop 容器名字

开启已有的容器:docker start 容器名字

docker start 指定一个容器
docker run 指定一个镜像

查看容器的详细信息:docker inspect c1

查看容器运行日志docker logs c1

删除容器:docker rm 容器名称/容器id,注意不能删除正在运行的容器

文件拷贝:
docker cp 待拷贝的文件或目录 容器名称:容器目录
docker cp 容器名称:容器目录 带拷贝的文件或目录

目录挂载
创建容器的时候,将宿主机的目录与容器的目录进行映射,这样就可以通过修改宿主机的某个目录文件去影响容器
-v 宿主机目录:容器目录
docker run -di --name=自定义容器名 -v /opt/:/usr/local/myhtml 镜像名

":"前面的目录是宿主机目录,后面的目录是容器内目录。

docker exec -it 容器名 /bin/bash

docker搭建mysql、nginx、redis

mysql
docker pull mysql:5.7
docker run -di --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7

-di 守护方式交互方式
-p 3306:3306(端口映射-p 宿主机端口:容器端口)
-e MYSQL_ROOT_PASSWORD=root设置环境变量
mysql:5.7 镜像

docker exec -it mysql /bin/bash
docker -u root -p root

nginx
docker pull nginx
docker run -di --name=nginx -p 80:80 nginx [可以创建的之后直接将容器文件挂载到宿主机某一目录]

redis
docker pull redis
docker run -di --name=redis -p 6379:6379 redis

容器/镜像打包

  • 可以通过scp命令将打包的镜像上传到其他服务器(机器) scp xx.tar 其他服务器ip:/root/xx.tar

  • export容器打包:(但最好还是用save存储打包
    1、容器打包:docker export -o /root/xx.tar t1
    2、导入容器:docker import xx.tar mytomcat:mycersion

  • 容器打包为镜像并上传到dockerhub(重要)

    • 制作镜像docker commit 容器名 想要创建的镜像名:版本号
    • 登录dockerhub,创建一个仓库
    • 本地连接镜像和仓库docker tag 创建的镜像名:版本号 dockerhub用户名/仓库名:版本号
    • 本地登录账户并push镜像docker logindocker push dockerhub用户名/仓库名:版本号

save镜像打包:docker save -o /root/xx.tar 新镜像名字

导入镜像:docker load -i /root/xx.tar之后会产生一个新的镜像,之后正常使用

导出后再导入(exported-imported)的镜像会丢失所有的历史,而保存后再加载(saveed-loaded)的镜像没有丢失历史和层(layer)。这意味着使用导出后再导入的方式,你将无法回滚到之前的层(layer),同时,使用保存后再加载的方式持久化整个镜像,就可以做到层回滚来回滚之前的层)。

搭建私有镜像仓库

私有仓库本身也是一个镜像

拉取私有仓库镜像docker pull registry

创建docker run -di --name=registry -p 5000:5000 registry
打开浏览器输入http://自己ip:5000/v2/_catalog,看到{"repositories":[]}
表示私有仓库搭建成功并且内容为空

修改/etc/docker/daemon.json,让docker信任私有仓库
添加{"insecure-registries":["自己ip:5000"]}

重启docker
systemctl restart docker

打标签
docker tag 上传的镜像名字 ip:5000/自己设定的镜像名字:标签名

上传
docker push ip:5000/自己设定的镜像名字:标签名

拉取私有仓库镜像
先让docker信任私有仓库
修改/etc/docker/daemon.json添加{"insecure-registries":["自己ip:5000"]}
docker pull 镜像名字

docker网络管理

查看docker网络:docker network ls

docker中默认网络分为bridge、host、none。

bridge可以与互联网通信,host和none不可以与外界网络通信

  • 容器间的通信实验

1、创建两个使用默认bridge网络容器
docker run -it --name=c1 busybox
docker run -it --name=c2 busybox
2、创建一个使用自定义的mynet网络(需要预先创建)的容器
docker network create --driver bridge mynet
docker run --network=mynet -it --name=c3 busybox
3、为容器2新增一个自定义的mynet网络连接
docker network connect mynet c2

此时容器c1和c3各有一块网卡,c2有两块网卡。
c1和c2, c2和c3可以通信,但是c1和c3不能通信。

Dockerfile文件

Dockerfile使用基于DSL语法的指令来构建一个docker镜像,之后使用docker bulide命令来构建一个新的镜像再次强调Dockerfile的作用就是用来制作镜像。

Dockerfile语法

| FROM      构建新镜像基于的基础镜像 
| LABEL     标签
| RUN       构建镜像时运行的Shell命令                 
| COPY      拷贝文件或目录到镜像中                     
| ADD       解压压缩包并拷贝                        
| ENV       设置环境变量                             
| USER      为RUN、CMD和ENTRYPOINT执行命令指定运行用户   
| EXPOSE    声明容器运行的服务端口                         
| WORKDIR   为RUN、CMD、ENTRYPOINT、COPY和ADD设置工作目录   
| CMD       运行容器时默认执行,如果有多个CMD指令,最后一个生效 

构建镜像步骤
1、创建一个目录
2、在目录下创建Dockerfile文件以及其他文件
3、通过docker builde构建镜像
4、通过构建的镜像启动容器

docker-compose.yml

如果只有一个docker镜像作为服务的话,只需要做好这一个镜像,然后用docker的run命令启动起来就可以了。但是如果是一个很大的服务的话,需要启动好几个容器来共同协作,这时如果手动docker run来启动好几个容器就显得比较繁琐,这时就可以用docker-compose.yml来规定从那些镜像开启容器,同时映射端口即其他的一些内容。

简单的语法示例

version: '3'   # compose-file的语法版本
services:    # 定义服务
  web:      # 指定服务1 web
    build: .    # 使用当前目录下的Dockerfile构建镜像
    ports:    # 指定端口映射
      - "9999:9999"
    container_name: flask_web  # 容器名称 container_name+services_name 会作为镜像名称
  redis:
    image: "redis:alpine"
    volumes:   # 指定数据卷
      - redis-data:/data
    container_name: redis

可以看到可以指定Dockerfile从头开始构建一个镜像然后创建容器,也可以用现成的镜像构建容器。

docker-compose命令

docker-compose up  启动服务
docker-compose up -d  后台启动服务
docker-compose down   卸载服务(容器也会被删除)
docker-compose logs  当后台启动服务的时候,可以使用这种方式查看日志

示例:搭建lamp

注意这里用docker-compose.yml只开启一个镜像的容器,其实可以开很多不同的镜像。

创建一个文件夹lab2并进入

添加index.php

<?php
    echo "hello world~";
?>

编写Dockerfile文件

FROM tutum/lamp 
# 换源
RUN sed -i "s/http:\/\/archive.ubuntu.com/http:\/\/mirrors.aliyun.com/g" /etc/apt/sources.list 
RUN apt-get update -y
# 删除环境原本的一堆东西
RUN rm /var/www/html/*  
# 源码copy进去目录,可自行修改
COPY ./index.php /var/www/html/
WORKDIR /var/www/html/
RUN chown www-data:www-data /var/www/html/* -R
RUN chmod -R 755 /var/www/html/
RUN service apache2 restart
EXPOSE 80
CMD ["apachectl", "-DFOREGROUND"]

执行docker build -t='myhello' .成功创建myhello:latest镜像

同目录下编写docker-compose.yml

version: "3"
services:
  web:
    image: "myhello:latest"
    container_name: "myweb"
    ports:
      - "80:80"

开启容器sudo docker-compose up -d

之后可以从物理机访问虚拟机ip的80端口。

关闭容器sudo docker-compose down

可以通过sudo docker inspect myweb1查看此容器的一些配置信息。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

缓存优化----SpringCache

spring cache spring Cache介绍 spring cache是一个框架&#xff0c;实现了基于注解的缓存功能&#xff0c;只需要简单地加一个注解&#xff0c;就能实现缓存功能。 Spring cache提供了一层抽象&#xff0c;底层可以切换不同的cache实现。具体就是通过CacheManager接口来统一不…

解决方案丨票据集中在集团总部处理,如何解决实物票据管理难?

目前越来越多的企业都成立了财务共享中心&#xff0c;通过统一财务中心可以进行集中式、标准化、统一化管理&#xff0c;提升财务运营水平与效率、降低企业的整体运作成本、集团战略发展支撑。 如何确保财务共享中心稳健和高效运营&#xff0c;是很多企业建立共享中心后面的难…

7.参数校验

在controller和service进行前端传参校验&#xff0c;保证存到数据库的数据是正确的 1.引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>这里无需…

《程序员面试金典(第6版)》面试题 16.05. 阶乘尾数

题目描述 设计一个算法&#xff0c;算出 n 阶乘有多少个尾随零。 示例 1: 输入: 3输出: 0解释: 3! 6, 尾数中没有零。 示例 2: 输入: 5输出: 1解释: 5! 120, 尾数中有 1 个零 说明: 你算法的时间复杂度应为 O(log n) 。 解题思路与代码 这道题&#xff0c;乍一看很简单…

米哈游新游正式公测!还没上线就已经“爆了”!

米哈游制作的3D冒险主题回合制策略游戏《崩坏&#xff1a;星穹铁道》&#xff0c;在2023年4月26日正式开启全平台公测。 该游戏在2021年10月27日曾开启过“始发测试”&#xff0c;后继续沉淀了两年才正式开启公测。 B站的ACG内容生态丰富&#xff0c;其中游戏相关内容当数米哈…

锂溶液净化和提纯

锂离子电池是一种充电电池&#xff0c;依靠锂离子在正极和负极之间移动来工作&#xff0c;广泛应用在便携式设备、卫星、储备电源、电动汽车等领域&#xff0c;具有替代各种二次电源的潜力。 近年来国家大力提倡和发展的新能源产业&#xff0c;锂离子电池的需求量的不断攀升&a…

聊聊「低代码」的实践之路

区块链、低代码、元宇宙、AI智能&#xff1b; 01 【先来说说背景】 这个概念由来已久&#xff0c;但是在国内兴起&#xff0c;是最近几年&#xff1b; 低代码即「Low-Code」&#xff1b; 指提供可视化开发环境&#xff0c;可以用来创建和管理软件应用&#xff1b; 简单的说…

Apache Zeppelin系列教程第一篇——安装和使用

一、Apache Zeppelin 介绍 Apache Zeppelin是一种开源的Web笔记本类型交互式数据分析工具&#xff0c;它提供了基于浏览器的界面&#xff0c;允许数据工程师和科学家通过各种语言和工具&#xff0c;如Scala, Python, SQL, R,等等&#xff0c;交互式地进行数据分析、可视化以及…

成功解决长时间挂起虚拟机后再次打开无法连接网络,并提示网络激活失败(亲测有效)

成功解决长时间挂起虚拟机后再次打开无法连接网络&#xff0c;并提示网络激活失败&#xff08;亲测有效&#xff01;&#xff09; 之前做区块链的一个虚拟机很久没打开&#xff0c;一直处于挂起状态&#xff0c;一直提示网络连接激活失败。试了很多种方法没解决&#xff0c;更…

如何设置ddns动态域名实现内网发布外网

在本地搭建好服务器&#xff0c;部署好web网站或其他应用后&#xff0c;需要设置动态域名服务ddns&#xff0c;将主机的内网IP端口映射到外网访问&#xff0c;才能实现在外网访问内网。今天小编就和大家分享一下内网发布外网方案&#xff0c;即如何设置ddns动态域名服务实现外网…

【hello Linux】可重入函数、volatile和SIGCHLD信号

目录 1. 可重入函数 2. volatile 3. SIGCHLD信号 Linux&#xff01;&#x1f337; 1. 可重入函数 先来谈一下重入函数的概念&#xff1a;重入函数便是在该函数还没有执行完毕便重复进入该函数&#xff08;一般发生在多线程中&#xff09;&#xff1b; 可重入函数&#xff1a…

【私有云底层】理解OpenStack核心组件

文章目录 &#x1f479; 关于作者一、Keystone 身份认证服务Keystone 架构工作流程 二、Glance 镜像服务Glance 架构磁盘与容器Glance 工作流程 三、Placement 放置服务Placement 工作流程 四、Nova 计算服务Nova 架构Nova 工作流程 五、Neutron 网络服务Neutron 架构Neutron 支…

浅谈测试用例设计 | 京东云技术团队

作者&#xff1a;京东物流 王莹莹 一、测试用例为什么存在 1.1 定义 测试用例(Test Case)是指对特定的软件产品进行测试任务的描述&#xff0c;体现测试方案、方法、技术和策略。测试用例内容包括测试目标、测试环境、输入数据、测试步骤、预期结果、测试脚本等&#xff0c;…

FreeRTOS系统学习第一步:新建 FreeRTOS 工程—软件仿真

创建一个FreeRTOS系统工程 1.新建工程文件夹2.Keil新建工程2.1 New Project2.2 Select Device For Target2.3 Manage Run-Time Environment 3. 在 KEIL 工程里面新建文件组3.1在 KEIL 工程里面添加文件 4. 编写 main 函数5. 调试配置5.1 设置软件仿真5.2 修改时钟大小在时钟相关…

基于python的socket网络通信【1】

一、Socket原理 学习了大佬的知识&#xff0c;简单记一些笔记 https://www.jianshu.com/p/066d99da7cbd http://c.biancheng.net/view/2351.html 1.1什么是Socket 在计算机通信领域&#xff0c;socket 被翻译为“套接字”&#xff0c;它是计算机之间进行通信的一种约定或一种…

计算机网路常见面试题(上)

计算机网络基础 # 网络分层模型 # OSI 七层模型是什么&#xff1f;每一层的作用是什么&#xff1f; OSI 七层模型 是国际标准化组织提出一个网络分层模型&#xff0c;其大体结构以及每一层提供的功能如下图所示&#xff1a; 每一层都专注做一件事情&#xff0c;并且每一层都…

网络安全:namp扫描工具

-sP可以扫描一个网段ip以及状态和基本信息&#xff0c;10.1.1.2-3就是扫描2和3这两个ip的主机 -p可以扫描指定ip对应主机的端口号&#xff0c;可以是一个范围 nmap简单扫描&#xff1a;nmap 地址 检查地址是否在线以及open的端口号 在端口开放&#xff0c;不一定可以与对方正常…

Spring 依赖注入源码

文章目录 依赖注入原始依赖注入方式注解方式寻找注入点注入点进行注入 从BeanFactory中找注入对象总结 依赖注入 具体代码是在AbstractAutowireCapableBeanFactory类的populateBean()方法&#xff0c;此方法中主要做的事情如下&#xff1a; 实例化之后&#xff0c;调用Instan…

各大外卖平台占据共享经济市场主要份额,占比近50%

哈喽大家好&#xff0c;随着大量互联网用户和移动支付的普及、大量用户通过共享平台将闲置资源和服务与需求方进行匹配&#xff0c;实现了资源的高效利用和消费者福利的提升。在全球化驱动的新型消费需求以及政策支持下&#xff0c;共享经济正在向更加成熟和规范化的方向发展。…

瑞芯微RK3568智慧视频录像机NVR设备解决方案

NVR技术应用功能模式&#xff0c;较为灵活且能够在很大程度上满足当今视频监控系统功能需求。以NVR技术为核心的小型NVR方案&#xff0c;具有规模较小、操作灵活、使用方便、经济实用等优点&#xff0c;其前端主要配合高清视频摄像机支持8路720P的高清视频图像接入&#xff0c;…