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位的系统且内核 ...
随机推荐
- 说说 Go 语言的坑(二)
上一篇文章 说说 Go 语言 for-range 的坑 说的是 for-range 的,工作中,其实还是遇到蛮多奇奇怪怪的问题,这里也顺便整理了一下,就当作是续集:) 先继续看 for-range 的 ...
- 最新基于nonebot的qq机器人搭建
导读 核心资源 ( 参考各项目到各自release下载 NoneBot简介 | go-cqhttp 帮助中心qq登录需要包签名,要自己部署 https://github.com/fuqiuluo/un ...
- 2021-11-29 Wpf的ViewModel和xaml绑定
ViewModel代码 public class MainViewModel { MainWindow _mainWindow; public MainViewModel(MainWindow mai ...
- JS语言里常见的随机函数示例,实验结果分布规律分析
在JavaScript语言里有个 Math.random() 随机函数,用于生成指定范围内的随机数. Math.random()函数 根据官方的定义: Math.random() 函数返回一个浮点数, ...
- 连续下雨天,.net开发者如何预防流感
最近连续下了3天雨,天气变化大,很容易引发感冒咳嗽等疾病.对于.NET技术开发人员来说,如何保持身体健康,保证工作效率是一个很重要的问题. 首先,我们需要注意保持室内空气流通,避免长时间处于封闭的空间 ...
- Vue项目打包后放到SpringBoot项目里注意点
- Jenkins 配置邮件通知(腾讯企业邮箱)
开通企业邮箱SMTP服务 登录企业微信邮箱,然后打开设置,在里面找到 收发信设置,在开启服务里面将 开启IMAP/SMTP服务 勾选 保存后回到邮箱绑定页签下,将安全设置里的安全登录开关打开 在下面的 ...
- SimpleDateFormat 线程安全问题修复方案
问题介绍 在日常的开发过程中,我们不可避免地会使用到 JDK8 之前的 Date 类,在格式化日期或解析日期时就需要用到 SimpleDateFormat 类,但由于该类并不是线程安全的,所以我们常发 ...
- SqlServer修改表字段类型
if not exists (select 1 from syscolumns where name='字段名' and id=OBJECT_ID('表名') and 条件) begin alter ...
- Deep Transfer Learning综述阅读笔记
这是一篇linkedin发表的深度迁移学习综述, 里面讲了一些对于search/recommend system中的迁移学习应用. 有不少指导性的方法, 看完后摘录出来 对于ranking方向的TL, ...