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位的系统且内核 ...
随机推荐
- (内附示例源码)如何通过electron构建桌面跨平台音视频应用
近年来,视频直播.直播带货.在线教育.在线医疗等音视频领域的相关行业都非常热门,成为大众瞩目的焦点. 在不久的将来,音视频技术渗透于各行各业,无处不在.从IoT网络到个人用户的移动设备,音视频技术以不 ...
- Day05_Java_作业
A:看程序写结果(写出自己的分析理由),程序填空,改错,看程序写结果. 1.看程序写结果 class Demo { public static void main(String[] args) { i ...
- 用 Vue.js 实现一个 JSON Viewer
演示地址: http://json.imlht.com/vue-json-viewer-demo.html 常用的 JSON 格式化工具 JSON 是一种轻量级的数据交换格式, 相信大家用得比较多, ...
- 【Oracle】 instr函数与substr函数以及自制分割函数
Oracle instr函数与substr函数以及自制分割函数 instr通常被用来作为判断某个字符串中是否含有执行字符串和将返回结果作为一些数据分割的数据,即有模糊查询like的作用,当返回的查询结 ...
- go run 和 go build的区别
go run:编译并运行程序,但不会产生exe文件,运行速度也相应较慢 go build : 会产生exe文件,运行速度快
- Go命令
build: 编译包和依赖 clean: 移除对象文件 doc: 显示包或者符号的文档 env: 打印go的环境信息 bug: 启动错误报告 fix: 运行go tool fix fmt: 运行gof ...
- Python操纵数据库:peewee
模块名:peewee 安装方法: pip install peewee 官方教程:http://docs.peewee-orm.com/en/latest/
- JDK中「SPI」原理分析
目录 一.SPI简介 1.概念 2.入门案例 2.1 定义接口 2.2 两个实现类 2.3 配置文件 2.4 测试代码 二.原理分析 1.ServiceLoader结构 2.iterator迭代方法 ...
- AI 一键去水印:教你无限量使用商业图片的技巧
场景再现 刚开始注册账号(啥账号具体不表了,小编不喜欢的那个),想弄个闪亮,好看,有个性化的 Logo.作为一名非专美工小白人员,网上翻了很久作图工具,要么就是不好用,好用的大部分都收费.最后没办法, ...
- Python第三方库pydash功能介绍
Python第三方库pydash功能介绍 本文来自ChatGPT的回答整理 demo部分都验证过ok 介绍 pydash 是一个 Python 库,用于提供类似于 JavaScript 库 lodas ...