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 Learning004
联邦学习--笔记004 2023.03.13周一 快中期答辩了(3.20),最近甲流高发期 毕设期间,今天学习了联邦学习的一篇论文---Differentially Private Federated ...
- 2023-07-15:给你一个 非递减 的正整数数组 nums 和整数 K, 判断该数组是否可以被分成一个或几个 长度至少 为 K 的 不相交的递增子序列。 输入:nums = [1,2,2,3,3,
2023-07-15:给你一个 非递减 的正整数数组 nums 和整数 K, 判断该数组是否可以被分成一个或几个 长度至少 为 K 的 不相交的递增子序列. 输入:nums = [1,2,2,3,3, ...
- js将数字金额转换成中文金额格式
在开发中我们经常会遇到处理数字的问题,下面介绍一种处理数字金额转换为中文金额的方式: 我们通常使用三种书面数字系统:全球使用的阿拉伯数字系统和两种本地数字系统(繁体.简体).常规时我们使用阿拉伯数字( ...
- AVR汇编(七):位操作和MCU控制指令
AVR汇编(七):位操作和MCU控制指令 位操作指令 SBI / CBI SBI 指令用于设置I/O寄存器中的第 b 位, CBI 指令用于清除I/O寄存器中的第 b 位. 例如: SBI DDRB, ...
- 表格JS实现在线Excel的附件上传与下载
摘要:本文由葡萄城技术团队于博客园原创并首发.转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 前言 在本地使用Excel时,经常会有需要在Excel中添加一 ...
- Sourcetrail 代码分析工具的使用
Sourcetrail 概述 Sourcetrail 是一个代码分析工具,它旨在帮助开发人员理解和导航复杂的代码库.它可以创建代码库的可视化图形,显示代码中的类.函数.变量.依赖关系等信息,从而帮助开 ...
- [Lua] IT技术熟练度生成器 | 根据IT活动记录生成md表格 | 自创
IT技术熟练度 v1.0 为衡量个人能力水平自创的一套评分机制,根据时间.代码行数.基础理论三个变量生成.最近在学lua,正好练下基本功.效果可见 个人介绍 | 代码统计 - 小能日记 - 博客园 ( ...
- Linux第四章(80X86保护模式及其编程)
80X86保护模式及其编程 80X86基础知识 保护模式内存管理 各种保护措施 中断和异常处理 任务管理 保护模式编程的初始化 一个简单的多任务内核 4.1 80X86系统寄存器和系统指令 为了协助处 ...
- 文心一言 VS 讯飞星火 VS chatgpt (79)-- 算法导论7.4 4题
四.请用go语言,证明:RANDOMIZED-QUICKSORT 期望运行时间是 Ω(nlgn). 文心一言: 首先,为了证明RANDOMIZED-QUICKSORT的期望运行时间是Ω(nlg n), ...
- 《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 ...