一、Docker基础知识

1、Docker

(1)Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可以移植的容器中,然后发布到任何的linux机器上,可以实现虚拟化;
(2)Docker容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低;

2、Docker的应用场景

(1)Web应用的自动化打包和发布;
(2)自动化测试和持续集成、发布;
(3)在服务型环境中部署和调整数据库或其他的后台应用;

3、Docker的优点

(1)快速一致地交付应用程序:Docker 允许开发人员使用提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期;
(2)响应式部署和扩展:Docker 是基于容器的平台,允许高度可移植的工作负载;
(3)在统一硬件上运行更多工作负载:Docker 非常适合于高密度环境以及中小型部署,而您可以用更少的资源做更多的事情;

4、简单的理解:

(1)Docker与虚拟机的区别:

docker共享主机的硬件资源,而虚拟机是独占一块硬件资源的:安装了虚拟机,占用2G内存,100G存储空间,运行程序时,就会占用这些资源,外部应用无法读取这些资源,但是Docker可以的。

二、Docker的架构

1、Docker中的三个基本概念:

(1)镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统,比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统;
(2)容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体,容器可以被创建、启动、停止、删除、暂停等;
(3)仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像;
(4)Docker使用客户端-服务器(C/S)架构模式,使用远程API来管理和创建Docker容器;

2、架构详解

(1)架构图
(2)解析
概念
说明
Docker 镜像(Images)
Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统;
Docker 容器(Container)
容器是独立运行的一个或一组应用,是镜像运行时的实;。
Docker 客户端(Client)
Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信;
Docker 主机(Host)
一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
Docker Registry
Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。
Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。
 
Docker Machine
Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。

三、安装Docker1、检查系统版本(1)linux内核要大于3.0,才可以使用docker(一般docker在linux系统下部署)uname -r

(2)查看当前操作系统的版本
cat /etc/os-release

2、安装docker

(1)卸载旧的docker版本(如果之前安装过docker,需要先卸载)
apt-get remove docker docker-engine docker.io containerd runc
(2)允许apt命令可以使用https访问Docker repository
apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
(3)添加Docker官方的GPGkey
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
(4)验证key(搜索后8位即可显示完成的密钥)
apt-key fingerprint 0EBFCD88
(5)设置repository版本位stable并更新软件列表
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" apt-get update 
(6)开始安装docker
apt-get install docker-ce docker-ce-cli containerd.io
(7)查看docker版本
docker --version sudo docker version
(8)docker换源
原因:docker服务器在国外,在平常使用docker下载镜像的过程中,难免会导致下载很慢的情况,可以将docker换成阿里源,这样下载就快很多了。
登录阿里云:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 按照官方教程操作
sudo mkdir -p /etc/docker 
sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://0orggnrc.mirror.aliyuncs.com"] } EOF
重启docker
sudo systemctl daemon-reload
sudo systemctl restart docker

3、docker的其他命令

(1)启动docker服务
systemctl start docker sudo service docker start
(2)查看docker是否开启
sudo systemctl status docker
(3)设置docker开机自动启动
sudo systemctl enable docker
(4)重启dockers
systemctl restart docker sudo service docker restart
(5)关闭docker服务
sudo service docker stop systemctl stop docker
(6)删除docker
(1)删除安装包
apt remove docker-ce
(2)删除镜像、容器、配置文件等内容
rm -rf /var/lib/docker

四、Docker的运行

1、Docker允许在容器内运行应用程序,使用docker run 命令行来在容器内运行一个应用程序

docker run ubuntu:15.10 /bin/echo "Hello world"

(1)参数说明

  • docker:Docker的二进制执行文件;
  • run:与前面的 docker 组合来运行一个容器;
  • ubuntu:15.10指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像;
  • /bin/echo "Hello world": 在启动的容器里执行的命令;
以上命令解释:Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo "Hello world",然后输出结果。

2、交互式容器

(1)命令行
docker run -i -t ubuntu:15.10 /bin/bash
(2)参数:
  • -t: 在新容器内指定一个伪终端或终端;
  • -i: 允许你对容器内的标准输入 (STDIN) 进行交互;
如下截图我们已经进入到Ubuntu15.10容器系统
(3)退出容器
CTRL + D/exit

3、启动容器(后台运行)

docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
输入如上命令,输出的结果为一串长字符,是容器ID,我们可以通过容器ID来查看对应的容器发生了什么

4、查看docker中容器的运行状态

(1)命令行

docker ps -a

(2)参数详情:

  • CONTAINER ID: 容器 ID;
  • IMAGE: 使用的镜像;
  • COMMAND: 启动容器时运行的命令;
  • CREATED: 容器的创建时间;
  • PORTS: 容器的端口信息和使用的连接类型(tcp\udp);
  • NAMES: 自动分配的容器名称;
  • STATUS: 容器状态;

(3)状态枚举:

  • created(已创建)
  • restarting(重启中)
  • running 或 Up(运行中)
  • removing(迁移中)
  • paused(暂停)
  • exited(停止)
  • dead(死亡)

5、宿主主机内查看容器标准输出

(1)命令行

docker logs 容器ID docker logs 容器名字
6、停止容器

(1)命令行

docker stop 容器ID docker stop 容器名字

五、基础命令

docker
docker stats --help

1、容器的操作

(1)如果我们本地没有 ubuntu 镜像,我们可以使用 docker pull 命令来载入 ubuntu 镜像:
docker pull ubuntu
(2)启动容器
docker run -it ubuntu /bin/bash
(3)查看所有容器
docker ps -a
(4)启动一个已经停止的容器
docker start 容器DI
(5)后台运行:-d 指定容器的运行模式
docker run -itd --name ubuntu-test ubuntu /bin/bash
(6)停止容器
docker stop 容器ID
(7)重启容器
docker restart <容器 ID>
(8)进入容器:使用-d参数时,容器启动后会进入后台,需要进入到容器,可以执行如下命令:
(1)docker attach: 如果从这个容器退出,会导致容器的停止;
(2)docker exec:推荐使用,因为此命令会退出容器终端,但不会导致容器的停止;
(3)更多参数说明请使用 docker exec --help 命令查看。
docker attach 5b759546b0ad
docker exec -it e79737bec76f /bin/bash
(9)导入和导出容器
①导出容器:如果要导出本地某个容器,可以使用 docker export 命令
docker export 容器ID > ubuntu.tar
②导入容器:可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1:
cat docker/ubuntu.tar(导出镜像的绝对路径) | docker import - test/ubuntu:v1

(10)删除容器:删除容器使用 docker rm 命令:
docker rm -f 容器ID
(11)下面的命令可以清理掉所有处于终止状态的容器
docker container prune

六、镜像

当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从Docker Hub公共镜像源下载。

1、镜像的操作命令集合

2、列出本地主机上的镜像:

(1)命令
docker images
(2)参数说明:
  • REPOSITORY:表示镜像的仓库源
  • TAG:镜像的标签
  • IMAGE ID:镜像ID
  • CREATED:镜像创建时间
  • SIZE:镜像大小
(3)注意:
  • 使用 REPOSITORY:TAG 来定义不同的镜像
  • 如果不指定一个镜像的版本标签,docker 将默认使用 ubuntu:latest 镜像

3、获取新的镜像

docker pull mysql:8

4、查找镜像

(1)https://hub.docker.com/
(2)docker search 命令来搜索镜像 docker search mysql
参数说明:
  • NAME: 镜像仓库源的名称
  • DESCRIPTION: 镜像的描述
  • OFFICIAL: 是否 docker 官方发布
  • stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
  • AUTOMATED: 自动构建

5、删除镜像

--删除镜像使用rmi,i是指images
docker rmi hello-world

6、创建镜像

(1)下载镜像
当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行
(1)从已经创建的容器中更新镜像,并且提交这个镜像
(2)使用 Dockerfile 指令来创建一个新的镜像

(2)更新镜像
(1)在如上的图中,创建了一个容器,接下来在运行的容器中更新
apt-get update
(2)退出容器
(3)此时,容器ID为()的容器,是按照我们的需求更改的容器,可以通过docker commit 来提交容器副本
docker commit -m='ubuntu15.10 has update' -a='runoob' 7d2a07d3e466 runoob/ubuntu:V2
参数说明:
-m:提交的描述信息
-a: 指定镜像作者
e218edb10161:容器 ID
runoob/ubuntu:v2:指定要创建的目标镜像名
(4)使用新镜像启动一个容器:
docker run -t -i runoob/ubuntu:V2 /bin/bash
(3)构建镜像
①使用docker build,从零开始创建一个新的镜像,需要创建一个Dockerfile,其中包含一组指令来告诉Docker如何构建镜像:
Dockerfile文件内容:
FROM    centos:6.7
MAINTAINER Fisher "fisher@sudops.com" RUN /bin/echo 'root:123456' |chpasswd
RUN useradd runoob
RUN /bin/echo 'runoob:123456' |chpasswd
RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE 22
EXPOSE 80
CMD /usr/sbin/sshd -D
②构建镜像
docker build -t runoob/centos:6.7 /opt/docker

③参数说明
  • 每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
  • 第一条FROM,指定使用哪个镜像源
  • RUN 指令告诉docker 在镜像内执行命令,安装了什么
  • -t :指定要创建的目标镜像名
  • . :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径

7、设置镜像标签

(1)命令行
docker tag d07ea9ca8e85 runoob/centos:centos6.7

七、Docker容器连接

容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过-P或者-p参数来指定端口映射

1、运行容器mysql并配置使得其他人可以连接

(1)命令

docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
(2)参数说明:
  • -p 3306:3306 :映射容器服务的3306端口到宿主机的3306 端口外部主机可以直接通过宿主机ip:3306 访问到 MySQL 的服务。
  • MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码
(3)设置过程
docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:8

docker ps

docker exec -it 28f89b6538f9 bash

mysql -u root -p

输入密码

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH
GRANT OPTION; FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY 'pass
word' PASSWORD EXPIRE NEVER; alter user 'root'@'%' identified with mysql_native_p
assword by '123456'; FLUSH PRIVILEGES; 使用自己电脑上的navicat连接mysql

八、Docker仓库管理

仓库(Repository)是集中存放镜像的地方

1、关联

(1)官网注册
(2)登录和退出:
需要输入用户名和密码,登录后就可以从 docker hub 上拉取自己账号下的全部镜像
①登录
docker login
②退出
docker logout
(3)推送镜像:用户登陆后,可通过docker push命令将自己的镜像推送到dockers Hub
docker tag ubuntu:18.04 annona/ubuntu:18.04 
docker image ls
docker push annona/ubuntu:18.04
docker search annona/ubuntu

九、docker数据卷的概念

1、概念图

2、数据卷的默认位置

/var/lib/docker/volumes

3、可以自己你创建数据卷目录

docker volume create mulu_name

4、查看数据卷内容

docker volume inspect annona

5、查看有多少个数据卷

docker volume ls

6、删除某一个数据卷

docker volume rm annona

十、在Docker中运行容器

1、运行gogs

docker pull gogs/gogs
mkdir -p /var/gogs
docker run --name=gogs -p 7777:22 -p 9999:3000 -v /var/gogs:/data/ gogs/gogs
docker run -d --name=gogs -p 1002:22 -p 1008:3000 -v /var/gogs:/data gogs/gogs
-d:后台运行
-v:数据卷挂载, 用于将容器和数据分离
gogs访问地址:
-p:port1:port2--port1与port2是映射的,port2是容器开放给linux系统的端口,port1是linux系统开放给其他主机连接的端口
http://192.168.95.129:1008/install

2、运行jenkins

#创建 jenkins_home 目录
sudo mkdir /home/jenkins_home
#设置该目录的所有者和所属的组,普通用户默认uid为1000, gid为1000,-R指遍及子目录
sudo chown -R 1000:1000 /home/jenkins_home docker run -d --name jenkins2.138.4 -p 9090:8080 -p 50000:50000 --privileged=true -v /home/jenkins_home:/var/jenkins_home jenkins/jenkins:2.138.4 http://192.168.95.129:9090/

Docker从了解到部署应用的详细教程的更多相关文章

  1. 阿里云运维部署工具AppDeploy详细教程

    AppDeploy是一个通过SSH实现的命令行工具,可完成应用部署和远程运维管理.当前工具实现为两个版本:普通版(伪代码描述语言)和Python版.Python版使用Python语法规则,可实现您的各 ...

  2. Mac 安装并破解热部署插件JRebel详细教程

    热部署插件 JRebel 非常高效的解决了在IDEA中对 Java 代码修改重启Tomcat的效率问题,这样大大降低了项目开发的时间,不用重启即可重新编译修改过的Java代码! (1)IDEA中安装热 ...

  3. Docker Harbor私有仓库部署与管理 (超详细配图)

    Docker Harbor私有仓库部署与管理 1.Harbor 介绍 2.Harbor部署 3.Harbor管理 1.Harbor 介绍: 什么是 Harbor ? Harbor 是 VMware 公 ...

  4. Kubernetes集群的部署方式及详细步骤

    一.部署环境架构以及方式 第一种部署方式 1.针对于master节点 将API Server.etcd.controller-manager.scheduler各组件进行yum install.编译安 ...

  5. 服务发现之consul理论整理_结合Docker+nginx+Tomcat简单部署案例

    目录 一.理论概述 服务发现的概念简述 consul简述 二.部署docker+consul+Nginx案例 环境 部署 三.测试 四.总结 一.理论概述 服务发现的概念简述 在以前使用的是,N台机器 ...

  6. docker安装gitlab并部署CICD

    摘要 本文主要实现了在docker下安装gitlab,将gitlab绑定在宿主机的180端口,将gitlab的clone的URL添加指定端口号:部署了CI/CD,并公布了测试项目. 安装docker[ ...

  7. docker 镜像仓库 Harbor 部署 以及 跨数据复制

    docker 镜像仓库 Harbor 部署 跨数据复制 Harbor 是 Vmwar 公司开源的 企业级的 Docker Registry 管理项目 它主要 提供 Dcoker Registry 管理 ...

  8. Docker环境 ELK 快速部署

    Docker环境 ELK快速部署 环境 Centos 7.4 , Docker version 17.12 Docker至少3GB内存: #内核配置 echo ' vm.max_map_count = ...

  9. 使用Docker+Jenkins自动构建部署

    环境 Windows 10 Docker Version 18.06.1-ce-win73 (19507) 运行jenkins 运行jenkins 容器 docker run -d --name ln ...

  10. 【Docker】(3)---linux部署Docker、Docker常用命令

    linux部署Docker.Docker常用命令 本次部署Linux版本:CentOS 7.4 64位. 说明: 因为Docker是基于Linux 64bit的 所以Docker要求64位的系统且内核 ...

随机推荐

  1. Federated Learning004

    联邦学习--笔记004 2023.03.13周一 快中期答辩了(3.20),最近甲流高发期 毕设期间,今天学习了联邦学习的一篇论文---Differentially Private Federated ...

  2. 2023-07-15:给你一个 非递减 的正整数数组 nums 和整数 K, 判断该数组是否可以被分成一个或几个 长度至少 为 K 的 不相交的递增子序列。 输入:nums = [1,2,2,3,3,

    2023-07-15:给你一个 非递减 的正整数数组 nums 和整数 K, 判断该数组是否可以被分成一个或几个 长度至少 为 K 的 不相交的递增子序列. 输入:nums = [1,2,2,3,3, ...

  3. js将数字金额转换成中文金额格式

    在开发中我们经常会遇到处理数字的问题,下面介绍一种处理数字金额转换为中文金额的方式: 我们通常使用三种书面数字系统:全球使用的阿拉伯数字系统和两种本地数字系统(繁体.简体).常规时我们使用阿拉伯数字( ...

  4. AVR汇编(七):位操作和MCU控制指令

    AVR汇编(七):位操作和MCU控制指令 位操作指令 SBI / CBI SBI 指令用于设置I/O寄存器中的第 b 位, CBI 指令用于清除I/O寄存器中的第 b 位. 例如: SBI DDRB, ...

  5. 表格JS实现在线Excel的附件上传与下载

    摘要:本文由葡萄城技术团队于博客园原创并首发.转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 前言 在本地使用Excel时,经常会有需要在Excel中添加一 ...

  6. Sourcetrail 代码分析工具的使用

    Sourcetrail 概述 Sourcetrail 是一个代码分析工具,它旨在帮助开发人员理解和导航复杂的代码库.它可以创建代码库的可视化图形,显示代码中的类.函数.变量.依赖关系等信息,从而帮助开 ...

  7. [Lua] IT技术熟练度生成器 | 根据IT活动记录生成md表格 | 自创

    IT技术熟练度 v1.0 为衡量个人能力水平自创的一套评分机制,根据时间.代码行数.基础理论三个变量生成.最近在学lua,正好练下基本功.效果可见 个人介绍 | 代码统计 - 小能日记 - 博客园 ( ...

  8. Linux第四章(80X86保护模式及其编程)

    80X86保护模式及其编程 80X86基础知识 保护模式内存管理 各种保护措施 中断和异常处理 任务管理 保护模式编程的初始化 一个简单的多任务内核 4.1 80X86系统寄存器和系统指令 为了协助处 ...

  9. 文心一言 VS 讯飞星火 VS chatgpt (79)-- 算法导论7.4 4题

    四.请用go语言,证明:RANDOMIZED-QUICKSORT 期望运行时间是 Ω(nlgn). 文心一言: 首先,为了证明RANDOMIZED-QUICKSORT的期望运行时间是Ω(nlg n), ...

  10. 《Linux基础》08. 日志管理 · 备份与恢复

    @ 目录 1:日志管理 1.1:系统常用日志 1.2:日志管理 1.2.1:日志服务 1.2.2:配置文件 1.2.3:自定义日志管理 1.3:日志轮替 1.3.1:轮替服务 1.3.2:配置文件 1 ...