Docker从了解到部署应用的详细教程
一、Docker基础知识
1、Docker
2、Docker的应用场景
3、Docker的优点
4、简单的理解:
(1)Docker与虚拟机的区别:
docker共享主机的硬件资源,而虚拟机是独占一块硬件资源的:安装了虚拟机,占用2G内存,100G存储空间,运行程序时,就会占用这些资源,外部应用无法读取这些资源,但是Docker可以的。
二、Docker的架构
1、Docker中的三个基本概念:
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
cat /etc/os-release
2、安装docker
apt-get remove docker docker-engine docker.io containerd runc
apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
apt-key fingerprint 0EBFCD88
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" apt-get update
apt-get install docker-ce docker-ce-cli containerd.io
docker --version sudo docker version

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的其他命令
systemctl start docker sudo service docker start
sudo systemctl status docker
sudo systemctl enable docker
systemctl restart docker sudo service docker restart
sudo service docker stop systemctl stop 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": 在启动的容器里执行的命令;
2、交互式容器
docker run -i -t ubuntu:15.10 /bin/bash
- -t: 在新容器内指定一个伪终端或终端;
- -i: 允许你对容器内的标准输入 (STDIN) 进行交互;

CTRL + D/exit
3、启动容器(后台运行)
docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"

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 容器名字
(1)命令行
docker stop 容器ID docker stop 容器名字
五、基础命令
docker
docker stats --help
1、容器的操作
docker pull ubuntu
docker run -it ubuntu /bin/bash
docker ps -a
docker start 容器DI
docker run -itd --name ubuntu-test ubuntu /bin/bash
docker stop 容器ID
docker restart <容器 ID>
(1)docker attach: 如果从这个容器退出,会导致容器的停止;
(2)docker exec:推荐使用,因为此命令会退出容器终端,但不会导致容器的停止;
(3)更多参数说明请使用 docker exec --help 命令查看。
docker attach 5b759546b0ad
docker exec -it e79737bec76f /bin/bash

docker export 容器ID > ubuntu.tar
cat docker/ubuntu.tar(导出镜像的绝对路径) | docker import - test/ubuntu:v1

docker rm -f 容器ID
docker container prune
六、镜像
1、镜像的操作命令集合
2、列出本地主机上的镜像:
docker images
- REPOSITORY:表示镜像的仓库源
- TAG:镜像的标签
- IMAGE ID:镜像ID
- CREATED:镜像创建时间
- SIZE:镜像大小
- 使用 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、创建镜像
当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行
(1)从已经创建的容器中更新镜像,并且提交这个镜像
(2)使用 Dockerfile 指令来创建一个新的镜像

(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
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、设置镜像标签
docker tag d07ea9ca8e85 runoob/centos:centos6.7

七、Docker容器连接
1、运行容器mysql并配置使得其他人可以连接
(1)命令
docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
- -p 3306:3306 :映射容器服务的3306端口到宿主机的3306 端口外部主机可以直接通过宿主机ip:3306 访问到 MySQL 的服务。
- MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码
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仓库管理
1、关联
①登录
docker login
②退出
docker logout
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从了解到部署应用的详细教程的更多相关文章
- 阿里云运维部署工具AppDeploy详细教程
AppDeploy是一个通过SSH实现的命令行工具,可完成应用部署和远程运维管理.当前工具实现为两个版本:普通版(伪代码描述语言)和Python版.Python版使用Python语法规则,可实现您的各 ...
- Mac 安装并破解热部署插件JRebel详细教程
热部署插件 JRebel 非常高效的解决了在IDEA中对 Java 代码修改重启Tomcat的效率问题,这样大大降低了项目开发的时间,不用重启即可重新编译修改过的Java代码! (1)IDEA中安装热 ...
- Docker Harbor私有仓库部署与管理 (超详细配图)
Docker Harbor私有仓库部署与管理 1.Harbor 介绍 2.Harbor部署 3.Harbor管理 1.Harbor 介绍: 什么是 Harbor ? Harbor 是 VMware 公 ...
- Kubernetes集群的部署方式及详细步骤
一.部署环境架构以及方式 第一种部署方式 1.针对于master节点 将API Server.etcd.controller-manager.scheduler各组件进行yum install.编译安 ...
- 服务发现之consul理论整理_结合Docker+nginx+Tomcat简单部署案例
目录 一.理论概述 服务发现的概念简述 consul简述 二.部署docker+consul+Nginx案例 环境 部署 三.测试 四.总结 一.理论概述 服务发现的概念简述 在以前使用的是,N台机器 ...
- docker安装gitlab并部署CICD
摘要 本文主要实现了在docker下安装gitlab,将gitlab绑定在宿主机的180端口,将gitlab的clone的URL添加指定端口号:部署了CI/CD,并公布了测试项目. 安装docker[ ...
- docker 镜像仓库 Harbor 部署 以及 跨数据复制
docker 镜像仓库 Harbor 部署 跨数据复制 Harbor 是 Vmwar 公司开源的 企业级的 Docker Registry 管理项目 它主要 提供 Dcoker Registry 管理 ...
- Docker环境 ELK 快速部署
Docker环境 ELK快速部署 环境 Centos 7.4 , Docker version 17.12 Docker至少3GB内存: #内核配置 echo ' vm.max_map_count = ...
- 使用Docker+Jenkins自动构建部署
环境 Windows 10 Docker Version 18.06.1-ce-win73 (19507) 运行jenkins 运行jenkins 容器 docker run -d --name ln ...
- 【Docker】(3)---linux部署Docker、Docker常用命令
linux部署Docker.Docker常用命令 本次部署Linux版本:CentOS 7.4 64位. 说明: 因为Docker是基于Linux 64bit的 所以Docker要求64位的系统且内核 ...
随机推荐
- Federated Learning001
联邦学习--笔记001 2022.11.16周三 今天学习了联邦学习的开山之作---Communication-Efficient Learning of Deep Networks from Dec ...
- Word书签替换,加盖电子印章及转换PDF(Java实用版)
一.前言 在项目中有需要对word进行操作的,可以看看哈,本次使用比较强大的spire组件来对word进行操作,免费版支持三页哦,对于不止三页的word文件,可以购买收费版,官网:https://ww ...
- TodoList - 开源研究系列文章
接着上次的代码,整理出一个待办列表的程序,比较简单易用,读者可自行修改成自己需要的程序. 1. 项目目录: 目录见下图,对代码进行了划分,比较简单.主处理类在Helper目录里. 2. ...
- Mapbox—geocoder搜索地点error eaching the server
Mapbox-geocoder搜索地点error eaching the server --There was an errorr eaching the server 环境说明: vue3.3.4 ...
- 一起来自定义loader吧
loader 在 webpack 编译中起到非常重要的作用,用于对模块的源代码进行转换,比如 css-loader 将 css 代码处理成字符串,style-loader 创建 style 标签将 c ...
- 遥遥领先 spring,中国人的 solon 来啦!10% 的体积,10倍的速度
Solon 是什么? Java 生态型应用开发框架.它从零开始构建,有自己的标准规范与开放生态(历时五年,已有全球第二级别的生态规模).与其他框架相比,它解决了两个重要的痛点:启动慢,费内存.2023 ...
- numpy中计算相关系数的np.corrcoef
np.corrcoef的作用 计算 Pearson 乘积矩相关系数.它可以用来分析给定数据集中各个变量之间的线性相关程度,返回一个相关系数矩阵,相关系数矩阵中的值介于 -1 到 1 之间,包括 -1 ...
- 通过Scrum实现最大生产力的五种方法
在数字化.信息化.智能化蓬勃发展的今天,敏捷开发和Scrum已成为重塑项目管理的重要方式. 敏捷是一种体现不同方法的思维方式,包括了Scrum,看板,极限编程(XP).精益开发等众多框架. Scrum ...
- 程序员视角下的API数据接口对接指南
在当今互联网时代,许多应用程序和网站都需要使用第三方的API接口来获取数据.API(Application Programming Interface)允许不同的应用程序之间进行数据交互,从而提高 ...
- Nomad系列-Nomad网络模式
系列文章 Nomad 系列文章 概述 Nomad 的网络和 Docker 的也有很大不同, 和 K8s 的有很大不同. 另外, Nomad 不同版本(Nomad 1.3 版本前后)或是否集成 Cons ...