Docker--1

本文全面介绍了Docker的引入背景、核心优势及应用场景,详细解析了Docker的安装配置过程,包括镜像加速器的设置,镜像与容器的管理操作,以及如何在Docker中配置Nginx和MySQL等常见服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

docker安装链接

1.为什么引入的Docker

1.某IT部门要上线一个项目,一般:上服务器,拷贝一个tomcat,改端口号,部署到webapps文件夹。
在服务器上,某个应用出现问题,可能服务器不能用
现在采用微服务,分别由不同团队开发,各团队水平不同,可能一个团队出现问题,导致服务器出现问题。
2.开发和线上问题,开发阶段一套软件环境,测试没有问题,运维进行部署。正式部署服务器发生问题(启动参数、环境问题、漏配了参数)
3.微服务问题
4.持续的软件版本发布/测试项目,到线上环境 的集成

2.Docker是什么

Docker是一个开源的应用容器引擎
Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移值的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。
容器是完全 使用沙箱机制,相互之间不会有任何接口,容器性能开销极低。

3.Docker优点

1.简化程序
2.减少选择软件
3.节省开支
4.持续交付和部署
5.迁移方便

4.Docker的应用场景

Web应用的自动 化打包和发布
自动化测试和持续 集成、发布
在服务型环境中部署和调整数据 库或其他的后台 应用
从头编译或者扩展现有的OpenShift或CloudFoundry平到来搭建自己的Paas环境

IaaS:(Infrastructure-as-a-Service)(基础设施即服务)
PaaS:(Platform as a Service)(平台即服务)
SaaS:(Software-as-a-Service)(软件即服务)

5.Docker架构

Docker使用客户端-服务器(C/S)架构模式,使用远程API来管理和创建Docker容器
Docker容器通过Docker镜像来创建
容器与镜像的关系类似 于面向对象编程中的对象 与类
Docker基本概念
镜像(Image)
容器(Container)
仓库(Repository)
理解了Docker的整个生命周期
Docker容器与镜像的关系

Docker面向对象
容器对象
镜像
Docker镜像(Images)Docker镜像是用于创建Docker容器的模板
Docker容器(Container)容器是独立运行的一个或一组应用
Docker客户端(Client)Docker客户端通过命令行或者其他工具使用Docker API与Docker的守护进程通信
Docker主机(Host)一个物理或者虚拟的机器用于执行Docker守护进程 和容器
Docker仓库(Registry)Docker仓库用来保存镜像,可以理解为代码控制 中的代码 仓库。Docker Hub提供 了庞大的镜像集合供使用
Docker MachineDocker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox , Digital Ocean , Microsoft Azure

6.Docker仓库

Docker仓库用来保存镜像,代码控制 中 的代码仓库

Docker Hub(https://hub.docker.com)提供 了庞大的镜像集合供使用
公有Dcoker Registry
私有Dockers Registry

7.Docker安装

官方提供 的安装教程:
https://docs.docker.com/install/linux/docker-ce/centos/#install-using-the-repository
CentOS安装要求:
Docker支持以下的CentOS版本:
CentOS 7(64-bit)
CentOS 6.5(64-bit)或更高的版本
目前,CentOS 仅发行版本中的内核支持 Docker。Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为3.10 以上。Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位、系统内核版本为 2.6.32-431或者更高版本。

1.校验版本
[root@node1 ~]# uname -r
2.6.32-642.6.2.el6.x86_64
从 2017 年 3 月开始 docker 在原来的基础上分为两个分支版本: Docker CE 和 Docker EE。Docker CE 即社区免费版,Docker EE 即企业版,强调安全,但需付费使用。本文介绍 Docker CE 的安装使用。
2.移除旧的版本

sudo yum remove docker \
				docker-client \
				docker-client-latest \
				docker-common \
				docker-latest \
				docker-latest-logrotate \
				docker-logrotate \
				docker-selinux \
				docker-engine-selinux \
				docker-engine

3.安装一些必要的系统工具

安装所需的软件包。 yum-utils 提供了 yum-config-manager 应用,并 device-mapper-persistent-data 和lvm2 由需要 devicemapper 存储驱动程序。

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

4.添加软件源信息
源1:(官方推荐)

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

源2:(阿里云源)

sudo yum-config-manager --add-repohttp://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

5.更新yum缓存

sudo yum makecache fast

6.安装Docker-CE

sudo yum -y install docker-ce

7.启动Docker后台服务

sudo systemctl start docker

8.重启Docker服务

sudo systemctl restart docker

9.安装成功后可通过查看

docker version

10.测试
通过运行hello-world 映像来验证是否正确安装了Docker Engine-Community

sudo docker run hello-world

卸载
执行以下命令来删除Docker CE:

$ sudo yum remove docker-ce
$ sudo rm -rf /var/lib/docker

7.Docker镜像加速器

Docker官方加速器
我们以 Docker 官方加速器进行介绍
https://docs.docker.com/registry/recipes/mirror/#use-case-the-china-registry-mirror
通过命令查看:在

/etc/docker/daemon.json 

中写入如下内容(如果文件不存在请新建该文件)

{
"registry-mirrors":["https://registry.docker-cn.com"]
}

注意,一定要保证该文件符合 json 规范,否则 Docker 将不能启

重启Docker:

sudo systemctl daemon-reload
sudo systemctl restart docker

阿里云加速器

登录阿里云个人帐号。
管理中心–容器镜像服务–镜像加速器(直接搜索即可)
在这里插入图片描述
检查加速器是否生效
配置加速器之后,如果拉取镜像仍然十分缓慢,请手动检查加速器配置是否生效,
在命令行执行 docker info ,查看镜像地址是否匹配,如匹配,说明配置成功

docker info

8.Docker获取镜像

Docker命令使用

获取命令行帮助信息直接在命令行内输入docker 命令后敲回车

8.1Docker查找镜像

查找镜像
我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为:https://hub.docker.com/

也可以docker search 命令来搜索镜像

8.2Docker获取镜像

docker pull [选项] [Docker Registey 地址[:端口号]/] 仓库名[:标签]
[root@node1 ~]# docker pull tomcat
Using default tag: latest
latest: Pulling from library/tomcat
146bd6a88618: Pull complete 
9935d0c62ace: Pull complete 
db0efb86e806: Pull complete 
e705a4c4fd31: Pull complete 
3d3bf7f7e874: Pull complete 
49371c5b9ff6: Pull complete 
e7873a7ca0fd: Pull complete 
925a95344b57: Pull complete 
0448a86618da: Pull complete 
71917b8caada: Pull complete 
Digest: sha256:f8edbcba564eca1d3d6d5d73d993a661801b5a7c6542dff44bdab57d0bccc567
Status: Downloaded newer image for tomcat:latest
docker.io/library/tomcat:latest
[root@node1 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
tomcat              latest              ed94f55483b8        13 days ago         507MB

docker启动tomcat镜像

docker run --rm -d -p 8080:8080 tomcat

在这里插入图片描述
查看有哪些容器在运行

[root@node1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS                    NAMES
8c8b86529fb7        tomcat              "catalina.sh run"   About a minute ago   Up About a minute   0.0.0.0:8080->8080/tcp   fervent_wescoff

9.CentOS7防火墙端口

开放8080端口(如下命令只针对CentOS7以上)
查看已经开放的端口

firewall-cmd --list-ports

开启端口:


firewall-cmd --zone=public --add-port=8080/tcp --permanent

重启防火墙

firewall-cmd --reload   重启
systemctl stop firewalld.service  停止
systemctl disable firewalld.service    禁止firewall开机启动

10.虚悬镜像

镜像列表中,还可以看到一个特殊的镜像,这个镜像既没有仓库名,也没有标签,均为虚悬镜像

这个镜像原本是有镜像名和标签的,原来为 tomcat:8.0,随着官方镜像维护,发布了新版本后,重新 docker
pull tomcat:8.0 时,tomcat:8.0 这个镜像名被转移到了新下载的镜像身上,而旧的镜像上的这个名称则被取
消,从而成为了 。除了 docker pull 可能导致这种情况,docker build 也同样可以导致这种现象。由于新旧镜
像同名,旧镜像名称被取消,从而出现仓库名、标签均为 的镜像。这类无标签镜像也被称为 虚悬镜像
(dangling image) 。 一般来说,虚悬镜像已经失去了存在的价值,是可以随意删除的,可以用下面的命令删
除:

docker image prune

11.Docker 删除本地镜像

语法:

docker image rm [选项] <镜像1> [<镜像2>.....]

用 ID、镜像名、摘要删除镜像 其中,<镜像> 可以是 镜像短 ID、镜像长 ID、镜像名 或者 镜像摘要。

如果要删除本地的镜像,可以使用 docker image rmi / rm 命令

docker image rmi 镜像ID //常用

要删除镜像必须确认此镜像⽬前没有被任何容器使⽤

Docker其它辅助命令
查看本地镜像的 IMAGE ID

docker images -q

查看⼀个镜像的制作历程

docker history 镜像名称

12.Docker 容器

容器是独立运行的一个或一组应用,以及它们的运行环境。

12.1查看容器状态

docker ps //查看运行的容器
docker ps –a //查看所有的容器(包含运行和退出)
docker container ls
docker container ls–a

docker history tomcat

12.2Docker 启动容器

启动容器有二种方式,一种是基于镜像新建一个容器并启动,一种是将在终止状态( stopped )的容器重新启动

docker run 参数 镜像名称:tag 执⾏的命令 常⽤参数:

-i 保持和 docker 容器内的交互,启动容器时,运⾏的命令结束后,容器依然存活,没有退出(默认是会退出,即停⽌的)
-t 为容器的标准输⼊虚拟⼀个tty-d 后台运⾏容器
--rm 容器在启动后,执⾏完成命令或程序后就销毁
--name 给容器起⼀个⾃定义名称
-p 宿主机:内部端口
docker run --rm -d --name tomcat1 -p 8080:8080 tomcat

12.33 查看正在运行的容器

docker ps

12.4 查看所有容器

docker ps -a

12.5停止容器

docker ps -a查找docker container id

docker stop 9be696a0c283 //停止正在运行容器(或Ctrl+c)
docker container stop tomcat1//停止正运行容器(ID或Names)

12.6 启动已终止容器

docker start 容器名/容器 ID

12.7 重启已关闭容器

docker restart 9be696a0c283//启动容器(根据ID或NAMES)

12.8 关闭和删除容器

docker rm 容器ID

12.9 Docker 守护态运行

如果使用了 -d 参数运行容器。此时容器会在后台运行并不会把输出的结果 (STDOUT) 打印到宿主机上面(输出结果可以用 docker logs查看)。

查看控制台结果:
docker logs tomcat1//(ID或Names)

13 Docker 进入容器

某些时候需要进入容器进行操作,使用 docker exec 命令

-i -t 参数 docker exec 后边可以跟多个参数,这里主要说明 -i -t 参数。 只用 -i 参数时,由于没有分配伪终端,界面没有我们熟悉的 Linux 命令提示符,但命令执行结果仍然可以返回。 当 -i -t 参数一起使用时,则可以看到我们熟悉的 Linux 命令提示符。

docker exec -it 容器ID(Names)bash

进入容器,对默认的tomcat进行页面修改,然后再访问查看效果。

注意默认容器内linux包是最小安装。只拥有最基本的命令
exit,不会导致容器的停止
docker exec -it tomcat1 bash //进入容器名称叫tomcat1
echo 'qfnj-weixin'>>index.jsp //对容器内的index.jsp进行字符串追加

14.在linux宿主机和Docker容器之间交互

docker cp [OPTIONS] CONTAINER:PATH LOCALPATH //容器中 复制到 宿主机
docker cp [OPTIONS] LOCALPATH|- CONTAINER:PATH //宿主机 复制到 容器中

宿主机复制一个图片到容器中:将png图片复制到了容器指定目录下

docker cp test.png tomcat:/usr/local/tomcat/webapps/ROOT

将容器内的index.jsp 复制出来,修改再复制回去

docker cp tomcat1:/usr/local/tomcat/webapps/ROOT/index.jsp /root

15.Docker查看日志

docker logs 容器名称/ID

–since : 此参数指定了输出日志开始日期,即只输出指定日期之后的日志。
-f : 查看实时日志
-t : 查看日志产生的日期
-tail=10 : 查看最后的10条日志
tomcat8080 : 容器名称

16.Docker数据卷

问题:通过镜像创建一个容器。容器一旦被销毁,则容器内的数据将一并被删除。但有些情况下,通过服务器上传的图片出会丢失。容器中的数据不是持久化状态的。
什么是数据卷数据卷 :
是一个可供一个或多个容器使用的特殊目录
特性:

· 数据卷可以在容器之间共享和重用
· 对数据卷的修改会立马生效
· 对数据卷的更新,不会影响镜像
· 数据卷默认会一直存在,即使容器被删除

在这里插入图片描述

docker 引入了数据卷(volume) 机制。数据卷是存在于一个或多个容器中的特定文件或文件夹,这个文件或文件夹以独立于 docker 文件系统的形式存在于宿主机中

创建一个数据卷

docker volume create vol-test    //test公共的文件夹资源静态资源

查看所有的 数据卷

docker volume ls

17.Docker配置Nginx

1.取最新版的 Nginx 镜像

docker pull nginx:latest

2.查看本地镜像

docker images

3.运行容器

docker run --name nginx-test -d -p 8080 nginx

4.检验安装是否成功

http://127.0.0.1/

17.1Nginx默认目录

输入 命令:

whereis nginx

即可看到类似如下的内容:

nginx: /usr/sbin/nginx /usr/lib64/nginx /etc/nginx /usr/share/nginx

以下是Nginx的默认路径:

(1) Nginx配置路径:/etc/nginx/
(2) PID目录: /var/run/nginx.pid
(3) 错误日志: /var/log/nginx/error.log
(4) 访问日志: /var/log/nginx/access.log
(5) 默认站点目录: /usr/share/nginx/html

事实上,中需知道Nginx配置路径,其他路径可在/etc/nginx/nginx.conf以及/etc/nginx/conf.d/default.conf中查询到。

17.2Nginx反向代理到tomcat

17.2.1docker 中安装vim

进入docker

docker exec -it nginx bash

接着执行:

apt-get update

apt-get install vim

如果不进行更新就会报错:

此时会报出bash: vi: command not found

出现问题:

Reading package lists… Done
Building dependency tree
Reading state information… Done
E: Unable to locate package vim

17.2.2测试Nginx

在这里插入图片描述

17.2.3配置反向代理

vim /etc/nginx/nginx.conf

user nginx;

worker_processes 1;

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;


events {
worker_connections 1024;
}


http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

sendfile on;
#tcp_nopush on;

keepalive_timeout 65;

#gzip on;



upstream tomcat {
server 172.17.0.4(修改):8080;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://tomcat;
index index.html index.htm;
}	
}

include /etc/nginx/conf.d/*.conf;
}

重新启动容器即可。

18.Docker配置MySQL

1.搜索镜像

docker search mysql

2.安装镜像

docker pull mysql:5.6

3.创建并启动MySQL容器

docker run -d --name mysql5.6-3306 -p 3306:3306 -e MYSQL_ROOT_PASSWORD='(密码)' mysql:5.6

4.访问测试
进入到容器内部

docker exec -it mysql5.6-3306 bash

连接MySQL数据库:

mysql -u root -p

输入数据 库密码即可完成

5.授权其他机器登陆
1、授权主机访问:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '(密码)' WITH GRANT OPTION;

2、刷新权限

FLUSH PRIVILEGES;

3、退出:

EXIT

18.Docker定制镜像

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

1、对于开发人员,可以为开发团队提供一个完全一致的开发环境
2、对于测试人员,可以直接拿开发时所构建的镜像测试。
3、对于运维人员,在部署时,可以实现快速部署、移值。
Dockerfile 定制镜像

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值