建设家具网站,百度医疗网站建设,网站网页建设一般多少钱,网站推广工做计划范本Docker与微服务实战——基础篇 第一章 Docker 简介1.1 docker 理念1.2 容器与虚拟机比较 第二章 Docker 安装2.1 前提说明2.2 Docker的基本组成2.2.1 镜像#xff08;image#xff09;2.2.2 容器#xff08;container#xff09;2.2.3 仓库#xff08;repository#xff… Docker与微服务实战——基础篇 第一章 Docker 简介1.1 docker 理念1.2 容器与虚拟机比较 第二章 Docker 安装2.1 前提说明2.2 Docker的基本组成2.2.1 镜像image2.2.2 容器container2.2.3 仓库repository2.2.4 小结 2.3 Docker 工作原理2.4 Docker运行的基本流程2.5 CentOS 7 安装 Docker2.6 阿里云镜像加速 第三章 Docker 常用命令3.1 帮助启动类命令3.2 镜像命令3.2.1 docker images——列出本地主机上的镜像3.2.2 docker search——搜索镜像3.2.3 docker pull——下载镜像3.2.4 docker system df ——查看镜像/容器/数据卷所占的空间3.2.5 docker rmi —— 删除镜像 3.3 容器命令3.3.1 新建启动容器3.3.2 列出当前所有正在运行的容器3.3.3 退出容器3.3.4 启动已停止运行的容器3.3.5 停止容器3.3.6 强制停止容器3.3.7 删除已停止的容器3.3.8 启动守护式容器后台服务器***3.3.9 查看容器日志3.3.10 查看容器内运行的进程3.3.11 进入正在运行的容器并以命令行交互3.3.12 从容器内拷贝文件到主机上3.3.13 导入和导出容器 第四章 Docker 镜像4.1 镜像是什么4.2 分层的镜像4.3 UnionFS联合文件系统4.4 docker 镜像加载原理4.5 为什么 docker 镜像要采用这种分层结构4.6 Docker镜像commit操作命令 第五章 本地镜像发布到阿里云5.1 将本地镜像推送到阿里云5.2 将阿里云上的镜像下载到本地 第六章 本地镜像发布到私有库第七章 Docker容器数据卷7.1 容器数据卷的含义7.2 容器数据卷的功能7.3 数据卷的案例7.3.1 宿主和容器之间映射添加容器卷7.3.2 读写规则映射添加说明7.3.3 卷的继承和共享 第八章 Docker常规安装简介8.1 安装tomcat8.2 安装mysql8.3 安装redis 第一章 Docker 简介
1.1 docker 理念
Docker是内核级虚拟化。
Docker是基于Go语言实现的云开源项目。
Docker是一个C/S模式的架构后端是一个松耦合架构众多模块各司其职。
Docker解决了运行环境和配置问题的软件容器方便做持续集成并有助于整体发布的容器虚拟化技术。
1.2 容器与虚拟机比较
虚拟机VMDocker容器操作系统宿主机OS上运行虚拟机OS与宿主机共享OS存储大小镜像庞大vmdk、vid等镜像小便于存储与传输运行性能操作系统额外的CPU、内存消耗几乎无额外性能损失移植性笨重与虚拟化技术耦合度高轻便、灵活适应于Linux硬件亲和性面向硬件运维者面向软件开发者部署速度较慢10s以上快速秒级
第二章 Docker 安装
2.1 前提说明
Docker 必须部署在Linux内核的系统上。
前提条件 目前CentOS仅发行版本中的内核支持Docker。Docker运行在CentOS 764-bit要求系统为64位、Linux系统内核版本为3.8以上这里选用CentOS7.x
查看自己的内核 uname命令用于打印当前系统相关信息内核版本号、硬件架构、主机名称和操作系统类型等
2.2 Docker的基本组成
2.2.1 镜像image
Docker 镜像image就是一个只读的模板。镜像可以用来创建Docker容器一个镜像可以创建很多容器。
它也相当于是一个root文件系统。比如官方镜像 centos:7 就包括了完整的一套 centos:7最小系统的root文件系统。
相当于容器的“源代码”docker镜像文件类似于Java的类模板而docker容器实例类似于Java中new出来的实例对象。
容器与镜像的关系类似于面向对象编程中的对象与类。
Docker面向对象容器对象镜像类
2.2.2 容器container
1从面向对象角度 Docker 利用容器Container独立运行的一个或一组应用应用程序或服务运行在容器里面容器就类似于一个虚拟化的环境容器是用镜像创建的运行实例。就像是Java中的类和实例对象一样镜像是静态的定义容器是镜像运行时的实体。容器为镜像提供了一个标准的和隔离的运行环境它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
2从镜像容器角度 可以把容器看做是一个简易版的Linux环境包括root用户权限、进程空间、用户空间和网络空间等和运行在其中的应用程序。
2.2.3 仓库repository
仓库Repository是集中存放镜像文件的场所。
类似于 Maven仓库存放各种jar包的地方 github仓库存放各种git项目的地方 Docker公司提供的官方registry被称为Docker Hub存放各种镜像模板的地方。
仓库分为公开仓库Public和私有仓库Private两种形式。最大的公开仓库是Docker Hubhttps://hub.docker.com/存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云、网易云等。
2.2.4 小结
Docker 本身是一个容器运行载体或称之为管理引擎。我们把应用程序和配置依赖打包好形成一个可交付的运行环境这个打包好的运行环境就是image镜像文件。只有通过这个镜像文件才能生成Docker容器实例类似java中new出来一个对象
image文件可以看作是容器的模板。Docker 根据image文件生成容器的实例。同一个image 文件可以生成多个同时运行的容器实例。
镜像文件 image文件生成的容器实例本身也是一个文件称为镜像文件。 容器实例 一个容器运行一种服务当我们需要的时候就可以通过docker客户端创建一个对应的运行实例也就是我们的容器 仓库 就是放一堆镜像的地方我们可以把镜像发布到仓库中需要的时候再从仓库中拉下来就可以了。
2.3 Docker 工作原理
Docker是一个Client-Server结构的系统Docker守护进程运行在主机上然后通过Socket连接从客户端访问守护进程从客户端接受命令并管理运行在主机上的容器。容器是一个运行时环境。
2.4 Docker运行的基本流程
用户是使用 Docker Client命令行窗口与Docker Daemon后台守护进程建立通信并发送请求给后者。Docker Daemon 作为 Docker 架构中的主体部分首先提供 Docker Server 的功能使其可以接受 Docker Client 的请求。Docer Engine引擎执行 Docker 内部的一系列工作每一项工作都是以一个Job的形式的存在。Job 的运行过程中当需要容器镜像时则从Docker Registry 中下载镜像并通过镜像管理驱动 Graph driver 将下载镜像以Graph的形式存储。当需要为Docker创建网络环境时通过网络管理驱动 Network driver创建并配置 Docker 来完成。当需要限制 Docker 容器运行资源或执行用户指令等操作时则通过 Exec driver执行驱动来完成。Libcontainer是一项独立的容器管理包Network driver以及Exec driver都是通过Libcontainer来实现具体对容器进行的操作。
2.5 CentOS 7 安装 Docker
安装地址https://docs.docker.com/engine/install/centos
1确定你是CentOS7及以上版本
2卸载旧版本
3yum 安装 gcc相关 首先要保证CentOS7能上外网再执行以下操作
[rootlocalhost ~]# yum -y install gcc
[rootlocalhost ~]# yum -y install gcc-c4安装需要的软件包
[rootlocalhost ~]# yum -y install yum-utils5设置 stable 镜像仓库
[rootlocalhost ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo6更新 yum 软件包索引
[rootlocalhost ~]# yum makecache fast7安装DOCKER CE
[rootlocalhost ~]# yum -y install docker-ce docker-ce-cli containerd.io8启动 docker
[rootlocalhost ~]# systemctl start docker
[rootlocalhost ~]# ps -ef | grep docker
root 83592 1 0 11:06 ? 00:00:00 /usr/bin/dockerd -H fd:// --containerd/run/containerd/containerd.sock
root 84314 2819 0 11:07 pts/0 00:00:00 grep --colorauto docker9测试
[rootlocalhost ~]# docker version
Client: Docker Engine - CommunityVersion: 24.0.7API version: 1.43Go version: go1.20.10Git commit: afdd53bBuilt: Thu Oct 26 09:11:35 2023OS/Arch: linux/amd64Context: defaultServer: Docker Engine - CommunityEngine:Version: 24.0.7API version: 1.43 (minimum version 1.12)Go version: go1.20.10Git commit: 311b9ffBuilt: Thu Oct 26 09:10:36 2023OS/Arch: linux/amd64Experimental: falsecontainerd:Version: 1.6.24GitCommit: 61f9fd88f79f081d64d6fa3bb1a0dc71ec870523runc:Version: 1.1.9GitCommit: v1.1.9-0-gccaecfcdocker-init:Version: 0.19.0GitCommit: de40ad0[rootlocalhost ~]# docker run hello-world
Unable to find image hello-world:latest locally
latest: Pulling from library/hello-world
719385e32844: Pull complete
Digest: sha256:88ec0acaa3ec199d3b7eaf73588f4518c25f9d34f58ce9a0df68429c5af48e8d
Status: Downloaded newer image for hello-world:latestHello from Docker! // 如果能看见这句话就代表安装成功10卸载
[rootlocalhost ~]# systemcl stop docker
[rootlocalhost ~]# yum remove docker-ce docker-ce-cli containerd.io
[rootlocalhost ~]# rm -rf /var/lib/docker
[rootlocalhost ~]# rm -rf /var/lib/containerd2.6 阿里云镜像加速
https://promotion.aliyun.com/ntms/act/kubernetes.html
注册一个属于自己的阿里云账户可复用淘宝账号登陆阿里云开发者平台点击控制台 选择容器镜像服务 获取加速器地址 粘贴脚本直接执行
[rootlocalhost ~]# mkdir -p /etc/docker
[rootlocalhost ~]# tee /etc/docker/daemon.json -EOF{registry-mirrors: [https://axlh76es.mirror.aliyuncs.com]}EOF
[rootlocalhost ~]# systemctl daemon-reload
[rootlocalhost ~]# systemctl restart docker测试运行 hello-world
[rootlocalhost ~]# docker run hello-worldHello from Docker! // 能打印出这句话证明运行成功第三章 Docker 常用命令
3.1 帮助启动类命令
1启动docker
[rootlocalhost ~]# systemctl start docker2停止docker
[rootlocalhost ~]# systemctl stop docker3重启docker
[rootlocalhost ~]# systemctl restart docker4查看docker状态
[rootlocalhost ~]# systemctl status docker5开机启动
[rootlocalhost ~]# systemctl enable docker6查看docker概要信息
[rootlocalhost ~]# docker info 7查看docker总体帮助文档
[rootlocalhost ~]# docker --help 8查看docker命令帮助文档
[rootlocalhost ~]# docker cp --help3.2 镜像命令
3.2.1 docker images——列出本地主机上的镜像
1命令
docker images [参数]2显示说明 REPOSITORY表示镜像的仓库源 TAG镜像的标签版本号 IMAGE ID镜像ID CREATED镜像创建时间 SIZE镜像大小 3参数说明
参数功能-a列出本地所有的镜像含历史映像层-q只显示镜像ID
4案例实操
[rootlocalhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest 9c7a54a9a43c 5 months ago 13.3kB3.2.2 docker search——搜索镜像
一般在dockerhub网站中搜索 1命令
docker search [options] 镜像名字2显示说明 NAME镜像名称 DESCRIPTION镜像说明 STARS点赞数量 OFFICIAL是否是官方的 AUTOMATED是否是自动构建的 3参数说明
选项功能- -limit只列出N个镜像默认25个
4案例实操
[rootlocalhost ~]# docker search redis
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
redis Redis is an open source key-value store that… 12438 [OK] // 只显示用的最多的默认前五条命令
[rootlocalhost ~]# docker search --limit 5 redis3.2.3 docker pull——下载镜像
1命令
1. docker pull 镜像名字[:TAG]
2. docker pull 镜像名字没有TAG就是最新版
等价于
docker pull 镜像名字latest2案例实操
[rootlocalhost ~]# docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
7b1a6ab2e44d: Pull complete
Digest: sha256:626ffe58f6e7566e00254b638eb7e0f3b11d4da9675088f4781a50ae288f3322
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest3.2.4 docker system df ——查看镜像/容器/数据卷所占的空间
1案例实操
[rootlocalhost ~]# docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 2 1 72.79MB 72.78MB (99%)
Containers 2 0 0B 0B
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B3.2.5 docker rmi —— 删除镜像
1命令
docker rmi [options] 某个XXX镜像名字IDdocker rmi -f 镜像ID 删除单个
docker rmi -f 镜像名1:TAG 镜像名2:TAG 删除多个
docker rmi -f $(docker images -qa) 删除全部2案例实操
删除单个
[rootlocalhost ~]# docker rmi -f 9c7a54a9a43c
删除多个
[rootlocalhost ~]# docker rmi -f ubuntu hello-world3.3 容器命令
3.3.1 新建启动容器
1命令
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]2参数说明
参数功能–name“容器新名字”为容器指定一个名称-d后台运行容器并返回容器ID也即启动守护式容器后台运行-i以交互模式运行容器通常与-t同时使用-t为容器重新分配一个伪输入终端通常与 -i 同时使用也即启动交互式容器前台有伪终端等待交互-P随机端口映射大写P-p指定端口映射小写p
参数说明 -i交互式操作。 -t终端。
3启动交互式容器前台命令行 4指定容器名字
3.3.2 列出当前所有正在运行的容器
1命令
docker ps [OPTIONS]2参数说明
参数功能-a列出当前所有在正在运行的容器历史上运行过的-l显示最近创建的容器-n显示最近n个创建的容器-q静默模式只显示容器编号
3案例实操
[rootlocalhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9931fe1e7230 ubuntu /bin/bash 5 minutes ago Up 5 minutes sleepy_feistel[rootlocalhost ~]# docker ps -a3.3.3 退出容器
exit run进去容器exit退出容器停止
ctrlpq run进去容器ctrlpq退出容器不停止3.3.4 启动已停止运行的容器
1命令
docker start 容器ID或者容器名2案例实操
[rootlocalhost ~]# docker ps -n 2
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4e0b5de73965 ubuntu /bin/bash 2 hours ago Up 2 hours dazzling_wilson
722e5fcce992 ubuntu bash 2 hours ago Exited (0) About an hour ago myu1
[rootlocalhost ~]# docker start 722e5fcce992
722e5fcce992
[rootlocalhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4e0b5de73965 ubuntu /bin/bash 2 hours ago Up 2 hours dazzling_wilson
722e5fcce992 ubuntu bash 2 hours ago Up 4 seconds myu13.3.5 停止容器
1命令
docker stop 容器ID 或者容器名3.3.6 强制停止容器
1命令
docker kill 容器ID或者容器名3.3.7 删除已停止的容器
1命令
docker rm 容器ID一次性删除多个容器实例
docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm3.3.8 启动守护式容器后台服务器***
在大部分的场景下我们希望 docker 的服务是在后台运行的我们可以通过-d 指定容器的后台运行模式。 1命令
docker run -d 容器名docker 容器后台运行就必须有一个前台进程。容器运行的命令如果不是那些一直挂起的命令就是会自动退出
2redis 前后台启动演示 1前台交互式启动
[rootlocalhost ~]# docker run -it redis:6.0.82后台守护式启动
[rootlocalhost ~]# docker run -d redis:6.0.83.3.9 查看容器日志
1命令
docker logs 容器ID3.3.10 查看容器内运行的进程
1命令
docker inspect 容器ID3.3.11 进入正在运行的容器并以命令行交互
1命令
docker exec -it 容器ID bin/bash
docker attach 容器ID重新进入2两个命令的区别 attach 直接进入容器启动命令的终端不会启动新的进程 用exit退出会导致容器的停止。
exec 是在容器中打开新的终端并且可以启动新的进程 用exit退出不会导致容器的停止。
推荐使用 docker exec命令因为退出容器终端不会导致容器的停止。
3.3.12 从容器内拷贝文件到主机上
1命令
docker cp 容器ID:容器内路径 目的主机路径3.3.13 导入和导出容器
1命令
docker export 容器ID 文件名.tar
cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号export 导出容器的内容流作为一个tar归档文件[对应 import 命令]
import 从tar 包中的内容创建一个新的文件系统再导入镜像[对应 export]
2案例实操
[rootlocalhost ~]# docker cp 0176a29ea86d a.tar
[rootlocalhost ~]# ls
a.tar
[rootlocalhost ~]# docker rm -f 0176a29ea86d
0176a29ea86d
[rootlocalhost ~]# cat a.tar | docker import - ubuntu/ubuntu:6.3
sha256:fc49059e80ad15fca9852d26ce0ef4ee8d628a0e855802fde4c5a970910784c1
[rootlocalhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu/ubuntu 6.3 fc49059e80ad About a minute ago 0B第四章 Docker 镜像
4.1 镜像是什么
镜像是一种轻量级、可执行的独立软件包它包含运行某个软件所需的所有内容我们把应用程序和配置依赖打包好形成一个可交付的运行环境包括代码、运行时需要的库、环境变量和配置文件等这个打包好的运行环境就是 image 镜像文件。
只有通过这个镜像文件才能生成 docker容器实例
4.2 分层的镜像 4.3 UnionFS联合文件系统
UnionFS联合文件系统Union文件系统UnionFS是一种分层、轻量级并且高性能的文件系统它支持对文件系统的修改作为一次提交来一层层的叠加同时可以将不同目录挂载到同一个虚拟文件系统下unite several directories into a single virtual filesystem。Union文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承基于基础镜像没有父镜像可以制作各种具体的应用镜像。
特性一次同时加载多个文件系统但从外面看起来只能看到一个文件系统联合加载会把各层文件系统叠加起来这样最终的文件系统会包含所有底层的文件和目录
4.4 docker 镜像加载原理
docker的镜像实际上由一层一层的文件系统组成这种层级的文件系统UnionFS。 booftsboot system主要包含bootloader和kernelbootloader主要是引导加载kernellinux刚启动会加载bootfs文件系统在docker镜像的最底层是引导文件系统bootfs。这一层与我们典型的Linux/Unix系统是一样的包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了此时内存的使用权已由bootfs转交给内核此时系统也会卸载bootfs。
rootfsroot system在bootfs之上。包含的就是典型Linux系统中的/dev/proc/bin/etx 等标准目录和文件。rootfs就是各种不同的操作系统发行版比如UbuntuCentOS等等。
4.5 为什么 docker 镜像要采用这种分层结构
镜像分层最大的一个好处就是共享资源方便复制迁移就是为了复用。
比如说有多个镜像都从相同的 base 镜像构建而来那么 Docker Host 只需在磁盘上保存一份 base 镜像
同时内存中也只需加载一份 base 镜像就可以为所有容器服务了。而且镜像的每一层都可以被共享。 Docker 镜像分层都是只读的容器层是可写的 当容器启动时一个新的可写层被加载到镜像的顶部。 这一层通常被称作“容器层”“容器层”之下的都叫“镜像层”。
4.6 Docker镜像commit操作命令
docker commit 提交容器副本使之成为一个新的镜像
1命令说明
docker commit -m提交的描述信息-a作者容器ID要创建的目标镜像名:[标签名]2案例演示ubuntu安装vim
1原始的默认ubuntu镜像是不带着vim命令的
[rootlocalhost ~]# docker run -it ubuntu
roote6602cb72a30:/# vim a.txt
bash: vim: command not found2外网连通的情况下安装vim
# 先更新我们的包管理工具
roote6602cb72a30:/# apt-get update
# 然后安装我们需要的vim
roote6602cb72a30:/# apt-get -y install vim3安装完成后commit我们自己的新镜像
[rootlocalhost ~]# docker commit -mvim cmd add ok -aabc e6602cb72a30 root/ubuntu:1.3
sha256:8b0e2010528a276b0fa0309b07d7bad3425b9e8c1fc5dc9e570c92791208dc80
[rootlocalhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
root/ubuntu 1.3 8b0e2010528a About a minute ago 162MB4启动我们的新镜像并和原来的对比
[rootlocalhost ~]# docker run -it ubuntu /bin/bash
root10209ad51630:/# vim a.txt
bash: vim: command not found
root10209ad51630:/# exit
exit
[rootlocalhost ~]# docker run -it 8b0e2010528a /bin/bash
rootc98544b2ae0c:/# vim a.txt
rootc98544b2ae0c:/# cat a.txt
hello dockerdocker中的镜像分层支持通过扩展现有镜像创建新的镜像。类似java继承于一个base基础类自己再按需扩展。 新镜像是从 base 镜像一层一层叠加生成的。每安装一个软件就在现有镜像的基础上增加一层。
第五章 本地镜像发布到阿里云
本地镜像发布到阿里云流程如下图
5.1 将本地镜像推送到阿里云
1本地镜像素材原型 2阿里云开发者平台 https://promotion.aliyun.com/ntms/act/kubernetes.html
3创建仓库镜像 1选择控制台进入容器镜像服务 2选择个人实例 3命名空间 4仓库名称 5进入管理界面获得脚本 4将镜像推送到阿里云 将镜像推送到阿里云registry 1管理脚本界面 2脚本实例
[rootlocalhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
root/ubuntu 1.3 8b0e2010528a 44 minutes ago 162MB
tomcat latest fb5657adc892 22 months ago 680MB
ubuntu latest ba6acccedd29 2 years ago 72.8MB
hello-world latest feb5d9fea6a5 2 years ago 13.3kB
redis 6.0.8 16ecd2772934 3 years ago 104MB[rootlocalhost ~]# docker login --usernamealiyun5432219780 registry.cn-hangzhou.aliyuncs.com
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-storeLogin Succeeded[rootlocalhost ~]# docker tag 8b0e2010528a registry.cn-hangzhou.aliyuncs.com/aafd/myubuntu:1.3[rootlocalhost ~]# docker push registry.cn-hangzhou.aliyuncs.com/aafd/myubuntu:1.3
The push refers to repository [registry.cn-hangzhou.aliyuncs.com/aafd/myubuntu]
bfa7aa9aef0f: Pushed
9f54eef41275: Pushed
1.3: digest: sha256:e12d91342719d1593beeb7d76db23bd44cf17911db2ebb9b0e0503695fd0fae8 size: 741[rootlocalhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry.cn-hangzhou.aliyuncs.com/aafd/myubuntu 1.3 8b0e2010528a 54 minutes ago 162MB
root/ubuntu 1.3 8b0e2010528a 54 minutes ago 162MB
tomcat latest fb5657adc892 22 months ago 680MB
ubuntu latest ba6acccedd29 2 years ago 72.8MB
hello-world latest feb5d9fea6a5 2 years ago 13.3kB
redis 6.0.8 16ecd2772934 3 years ago 104MB
5.2 将阿里云上的镜像下载到本地
1登录阿里云docker registry
[rootlocalhost ~]# docker login --usernamealiyun5432219780 registry.cn-hangzhou.aliyuncs.com
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-storeLogin Succeeded2从registry中拉取镜像
[rootlocalhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry.cn-hangzhou.aliyuncs.com/aafd/myubuntu 1.3 8b0e2010528a 54 minutes ago 162MB
root/ubuntu 1.3 8b0e2010528a 54 minutes ago 162MB
tomcat latest fb5657adc892 22 months ago 680MB
ubuntu latest ba6acccedd29 2 years ago 72.8MB
hello-world latest feb5d9fea6a5 2 years ago 13.3kB
redis 6.0.8 16ecd2772934 3 years ago 104MB[rootlocalhost ~]# docker rmi -f 8b0e2010528a
Untagged: root/ubuntu:1.3
Untagged: registry.cn-hangzhou.aliyuncs.com/aafd/myubuntu:1.3
Untagged: registry.cn-hangzhou.aliyuncs.com/aafd/myubuntusha256:e12d91342719d1593beeb7d76db23bd44cf17911db2ebb9b0e0503695fd0fae8
Deleted: sha256:8b0e2010528a276b0fa0309b07d7bad3425b9e8c1fc5dc9e570c92791208dc80
[rootlocalhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat latest fb5657adc892 22 months ago 680MB
ubuntu latest ba6acccedd29 2 years ago 72.8MB
hello-world latest feb5d9fea6a5 2 years ago 13.3kB
redis 6.0.8 16ecd2772934 3 years ago 104MB[rootlocalhost ~]# docker pull registry.cn-hangzhou.aliyuncs.com/aafd/myubuntu:1.3
1.3: Pulling from aafd/myubuntu
7b1a6ab2e44d: Already exists
09ba0e50a073: Already exists
Digest: sha256:e12d91342719d1593beeb7d76db23bd44cf17911db2ebb9b0e0503695fd0fae8
Status: Downloaded newer image for registry.cn-hangzhou.aliyuncs.com/aafd/myubuntu:1.3
registry.cn-hangzhou.aliyuncs.com/aafd/myubuntu:1.3
[rootlocalhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry.cn-hangzhou.aliyuncs.com/aafd/myubuntu 1.3 8b0e2010528a 57 minutes ago 162MB
tomcat latest fb5657adc892 22 months ago 680MB
ubuntu latest ba6acccedd29 2 years ago 72.8MB
hello-world latest feb5d9fea6a5 2 years ago 13.3kB
redis 6.0.8 16ecd2772934 3 years ago 104MB[rootlocalhost ~]# docker run -it 8b0e2010528a /bin/bash
root0d8aeb3b883a:/# vim a.txt
root0d8aeb3b883a:/# exit
exit第六章 本地镜像发布到私有库
docker registry是官方提供的工具可以用于构建私有镜像仓库。 1下载镜像docker registry
[rootlocalhost ~]# docker pull registry
Using default tag: latest
latest: Pulling from library/registry
79e9f2f55bf5: Pull complete
0d96da54f60b: Pull complete
5b27040df4a2: Pull complete
e2ead8259a04: Pull complete
3790aef225b9: Pull complete
Digest: sha256:169211e20e2f2d5d115674681eb79d21a217b296b43374b8e39f97fcf866b375
Status: Downloaded newer image for registry:latest
docker.io/library/registry:latest
[rootlocalhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry latest b8604a3fe854 23 months ago 26.2MB2运行私有库registry相当于本地有个私有docker hub
[rootlocalhost ~]# docker run -d -p 5000:5000 registry
fd0fa916bf1ff9677fd60f3e85e44cb319bdb43aa1e03d0936361c74edc2cdb4
[rootlocalhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fd0fa916bf1f registry /entrypoint.sh /etc… 8 seconds ago Up 7 seconds 0.0.0.0:5000-5000/tcp, :::5000-5000/tcp cranky_archimedes3案例演示创建一个新镜像ubuntu安装ifconfig命令
1原始的ubuntu镜像是不带着ifconfig命令的
[rootlocalhost ~]# docker run -it ubuntu /bin/bash
root6f49d88a0556:/# ifconfig
bash: ifconfig: command not found2外网连通的情况下安装ifconfig命令并测试通过
root6f49d88a0556:/# apt-get update
root6f49d88a0556:/# apt-get install net-tools
root6f49d88a0556:/# ifconfig
eth0: flags4163UP,BROADCAST,RUNNING,MULTICAST mtu 1500inet 172.17.0.3 netmask 255.255.0.0 broadcast 172.17.255.255ether 02:42:ac:11:00:03 txqueuelen 0 (Ethernet)RX packets 1995 bytes 21100770 (21.1 MB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 1393 bytes 78212 (78.2 KB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags73UP,LOOPBACK,RUNNING mtu 65536inet 127.0.0.1 netmask 255.0.0.0loop txqueuelen 1000 (Local Loopback)RX packets 0 bytes 0 (0.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 0 bytes 0 (0.0 B)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 03安装完成后commit我们自己的新镜像
[rootlocalhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6f49d88a0556 ubuntu /bin/bash 6 minutes ago Up 6 minutes pensive_turing
fd0fa916bf1f registry /entrypoint.sh /etc… 8 minutes ago Up 8 minutes 0.0.0.0:5000-5000/tcp, :::5000-5000/tcp cranky_archimedes
[rootlocalhost ~]# docker commit -mifconfig cmd add -aahx 6f49d88a0556 myubuntu:1.2
sha256:b35d6629da55eb92acc004e17bba9b8563108c55dbd1737941214e7deb28cef0
[rootlocalhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myubuntu 1.2 b35d6629da55 5 seconds ago 108MB
registry latest b8604a3fe854 24 months ago 26.2MB
ubuntu latest ba6acccedd29 2 years ago 72.8MB
hello-world latest feb5d9fea6a5 2 years ago 13.3kB
redis 6.0.8 16ecd2772934 3 years ago 104MB4启动我们的新镜像并和原来的对比
[rootlocalhost ~]# docker stop 6f49d88a0556
6f49d88a0556
[rootlocalhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myubuntu 1.2 b35d6629da55 About a minute ago 108MB
registry latest b8604a3fe854 24 months ago 26.2MB
ubuntu latest ba6acccedd29 2 years ago 72.8MB
hello-world latest feb5d9fea6a5 2 years ago 13.3kB
redis 6.0.8 16ecd2772934 3 years ago 104MB
[rootlocalhost ~]# docker run -it b35d6629da55 /bin/bash
root331eb9b604a9:/# ifconfig
eth0: flags4163UP,BROADCAST,RUNNING,MULTICAST mtu 1500inet 172.17.0.3 netmask 255.255.0.0 broadcast 172.17.255.255ether 02:42:ac:11:00:03 txqueuelen 0 (Ethernet)RX packets 6 bytes 508 (508.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 0 bytes 0 (0.0 B)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags73UP,LOOPBACK,RUNNING mtu 65536inet 127.0.0.1 netmask 255.0.0.0loop txqueuelen 1000 (Local Loopback)RX packets 0 bytes 0 (0.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 0 bytes 0 (0.0 B)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0root331eb9b604a9:/# exit
exit4curl验证私服库上有什么镜像
[rootlocalhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fd0fa916bf1f registry /entrypoint.sh /etc… 25 hours ago Up 25 hours 0.0.0.0:5000-5000/tcp, :::5000-5000/tcp cranky_archimedes
[rootlocalhost ~]# curl -XGET http://192.168.47.199:5000/v2/_catalog
{repositories:[]}5将新镜像myubuntu:1.2修改符合私服规范的Tag
[rootlocalhost ~]# docker tag myubuntu:1.2 192.168.47.199:5000/myubuntu:1.2
[rootlocalhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.47.199:5000/myubuntu 1.2 b35d6629da55 25 hours ago 108MB
myubuntu 1.2 b35d6629da55 25 hours ago 108MB6修改配置文件使之支持http 2个配置中间有个逗号‘,’别漏了这个配置是json格式的。
[rootlocalhost ~]# vim /etc/docker/daemon.json
{registry-mirrors: [https://axlh76es.mirror.aliyuncs.com],insecure-registries:[192.168.47.199:5000]
}
修改完后如果不生效建议重启docker服务。
[rootlocalhost ~]# systemctl restart docker重启成功之后再运行一下私有库
[rootlocalhost ~]# docker run -d -p 5000:5000 registry
a82ffb8bee06ad2b63fb615e1a55c2bb8e1776c44573a64be3ff63f6b14729387push推送到私服库
[rootlocalhost ~]# docker push 192.168.47.199:5000/myubuntu:1.2
The push refers to repository [192.168.47.199:5000/myubuntu]
c97b0ab9299d: Pushed
9f54eef41275: Pushed
1.2: digest: sha256:7a01caa8f3614e982bd2571866ec100eee2b265c9ed579fb66042dfbc0076d11 size: 7418curl验证私服库上有什么镜像
[rootlocalhost ~]# curl -XGET http://192.168.47.199:5000/v2/_catalog
{repositories:[myubuntu]}9pull到本地并运行
[rootlocalhost ~]# docker rmi -f 192.168.47.199:5000/myubuntu:1.2
[rootlocalhost ~]# docker rmi -f myubuntu:1.2
[rootlocalhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry latest b8604a3fe854 24 months ago 26.2MB
ubuntu latest ba6acccedd29 2 years ago 72.8MB
hello-world latest feb5d9fea6a5 2 years ago 13.3kB
redis 6.0.8 16ecd2772934 3 years ago 104MB
[rootlocalhost ~]# curl -XGET http://192.168.47.199:5000/v2/_catalog
{repositories:[myubuntu]}
[rootlocalhost ~]# docker pull 192.168.47.199:5000/myubuntu:1.2
1.2: Pulling from myubuntu
7b1a6ab2e44d: Already exists
e0855fb5fc2d: Already exists
Digest: sha256:7a01caa8f3614e982bd2571866ec100eee2b265c9ed579fb66042dfbc0076d11
Status: Downloaded newer image for 192.168.47.199:5000/myubuntu:1.2
192.168.47.199:5000/myubuntu:1.2
[rootlocalhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.47.199:5000/myubuntu 1.2 b35d6629da55 26 hours ago 108MB
[rootlocalhost ~]# docker run -it 192.168.47.199:5000/myubuntu:1.2 /bin/bash
root90b582e9b77a:/# ifconfig
eth0: flags4163UP,BROADCAST,RUNNING,MULTICAST mtu 1500inet 172.17.0.3 netmask 255.255.0.0 broadcast 172.17.255.255ether 02:42:ac:11:00:03 txqueuelen 0 (Ethernet)RX packets 7 bytes 578 (578.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 0 bytes 0 (0.0 B)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags73UP,LOOPBACK,RUNNING mtu 65536inet 127.0.0.1 netmask 255.0.0.0loop txqueuelen 1000 (Local Loopback)RX packets 0 bytes 0 (0.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 0 bytes 0 (0.0 B)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0第七章 Docker容器数据卷
7.1 容器数据卷的含义
卷就是目录或文件存在于一个或多个容器中有docker挂载到容器但不属于联合文件系统因此能够绕过Union File System提供一些用于持续存储或共享数据的特性。 卷的设计目的就是数据的持久化完全独立于容器的生存周期因此Docker不会在容器删除时删除其挂载的数据卷。
将docker容器内的数据保存进宿主机的磁盘中以达到数据持久化和敏感重要的数据备份。
1命令
--privilegedtrueDocker挂载主机目录访问如果出现cannot open directory .:Permission denied 解决方法在挂载目录后多加一个–privilegedtrue参数即可。
2参数说明
参数功能-v添加自定义的容器卷
3运行一个带有容器卷存储功能的容器实例
docker run -it --privilegedtrue -v /宿主机绝对路径目录:/容器内目录 镜像名7.2 容器数据卷的功能
将运用与运行的环境打包镜像run后形成容器实例运行但是我们对数据的要求希望是持久化的
特点
数据卷可在容器之间共享或重用数据卷中的更改可以直接实时生效数据卷中的更改不会包含在镜像的更新中数据卷的生命周期一直持续到没有容器使用它为止
7.3 数据卷的案例
7.3.1 宿主和容器之间映射添加容器卷
1命令
docker run -it --privilegedtrue -v /宿主机绝对路径目录:/容器内目录 镜像名# 将docker容器内的数据保存进宿主机的磁盘中
[rootlocalhost ~]# docker run -it --privilegedtrue -v /tmp/host_data:/tmp/docker_data --nameu1 ubuntu //这里的host_data和docker_data目录是自动创建的
root037178ca7174:/# cd /tmp/docker_data/
root037178ca7174:/tmp/docker_data# ls
root037178ca7174:/tmp/docker_data# touch dockerin.txt
root037178ca7174:/tmp/docker_data# ls
dockerin.txt# 在主机上去查看并创建一个新的文件
[rootlocalhost ~]# cd /tmp/host_data/
[rootlocalhost host_data]# ls
dockerin.txt
[rootlocalhost host_data]# touch hostin.txt# docker上查看是否有新建的文件
root037178ca7174:/tmp/docker_data# ls
dockerin.txt hostin.txt2查看数据卷是否挂载成功
[rootlocalhost ~]# docker inspect 037178ca7174
......Mounts: [{Type: bind,Source: /tmp/host_data,Destination: /tmp/docker_data,Mode: ,RW: true,Propagation: rprivate}],
.......3容器和宿主机之间数据共享
docker修改主机同步获得主机修改docker同步获得docker容器stop主机修改docker容器重启看数据是否同步。
[rootlocalhost host_data]# touch c.txt[rootlocalhost ~]# docker stop 037178ca7174
037178ca7174
[rootlocalhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[rootlocalhost ~]# docker start 037178ca7174
037178ca7174
[rootlocalhost ~]# docker exec -it 037178ca7174 /bin/bash
root037178ca7174:/# cd /tmp/docker_data/
root037178ca7174:/tmp/docker_data# ls
c.txt dockerin.txt hostin.txt7.3.2 读写规则映射添加说明
1读写默认
docker run -it --privilegedtrue -v /宿主机绝对路径目录:/容器内目录:rw 镜像名
默认同上案例默认就是rw2只读
容器实例内部被限制只能读取不能写
docker run -it --privilegedtrue -v /宿主机绝对路径目录:/容器内目录:ro 镜像名[rootlocalhost ~]# docker run -it --privilegedtrue -v /mydocker/u:/tmp/u:ro --name u2 ubuntu
rootb4ecac69f23a:/# cd /tmp/u/
rootb4ecac69f23a:/tmp/u# ls
rootb4ecac69f23a:/tmp/u# pwd
/tmp/u# 在主机的/mydocker/u/目录下创建a.txt并写入内容
[rootlocalhost ~]# cd /mydocker/u/
[rootlocalhost u]# touch a.txt
[rootlocalhost u]# vim a.txt # 在u2容器实例内部去查看
rootb4ecac69f23a:/tmp/u# ls
a.txt
rootb4ecac69f23a:/tmp/u# cat a.txt
dabs
cdb# 容器自己只能读取不能写
rootb4ecac69f23a:/tmp/u# touch b.txt
touch: cannot touch b.txt: Read-only file system
# 如果宿主机写入内容可以同步给容器内容器可以读取到。7.3.3 卷的继承和共享
1容器1完成和宿主机的映射
# 容器实例
[rootlocalhost ~]# docker run -it --privilegedtrue -v /mydocker/u:/tmp/u --name u1 ubuntu /bin/bash
rootcd788caa15dc:/# cd /tmp/u
rootcd788caa15dc:/tmp/u# ll
total 4
drwxr-xr-x. 2 root root 19 Nov 4 08:36 ./
drwxrwxrwt. 1 root root 15 Nov 4 08:44 ../
-rw-r--r--. 1 root root 9 Nov 4 08:36 a.txt
rootcd788caa15dc:/tmp/u# touch u1data.txt
rootcd788caa15dc:/tmp/u# ls
u1data.txt# 主机
[rootlocalhost u]# touch host.txt# 容器实例
rootcd788caa15dc:/tmp/u# ls
host.txt u1data.txt2容器2继承容器1的卷规则
[rootlocalhost ~]# docker run -it --privilegedtrue --volumes-from u1 --name u3 ubuntu
root2ba4fdfc72c4:/# cd /tmp/u/
root2ba4fdfc72c4:/tmp/u# ll
total 0
drwxr-xr-x. 2 root root 40 Nov 4 08:45 ./
drwxrwxrwt. 1 root root 15 Nov 4 08:49 ../
-rw-r--r--. 1 root root 0 Nov 4 08:45 host.txt
-rw-r--r--. 1 root root 0 Nov 4 08:44 u1data.txt
root2ba4fdfc72c4:/tmp/u# touch u2data.txt
root2ba4fdfc72c4:/tmp/u# ls
host.txt u1data.txt u2data.txt
root2ba4fdfc72c4:/tmp/u# ll
total 0
drwxr-xr-x. 2 root root 58 Nov 4 08:50 ./
drwxrwxrwt. 1 root root 15 Nov 4 08:49 ../
-rw-r--r--. 1 root root 0 Nov 4 08:45 host.txt
-rw-r--r--. 1 root root 0 Nov 4 08:44 u1data.txt
-rw-r--r--. 1 root root 0 Nov 4 08:50 u2data.txt第八章 Docker常规安装简介
总体步骤搜索镜像→拉取镜像→查看镜像→启动镜像服务端口映射→停止容器→移除容器
8.1 安装tomcat
1docker hub上面查找tomcat镜像 2从docker hub上拉取tomcat镜像到本地 3docker images查看是否有拉取到的tomcat 4使用tomcat镜像创建容器实例也叫运行镜像
[rootlocalhost ~]# docker run -d -p 8080:8080 --name ti tomcat
712f1fd1edc9bbddad1db1e23f9eb7f3b9b6c6ee4a6e86da41527a58482a08dc[rootlocalhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
712f1fd1edc9 tomcat catalina.sh run 33 seconds ago Up 32 seconds 0.0.0.0:8080-8080/tcp, :::8080-8080/tcp ti5访问猫首页
[rootlocalhost ~]# docker exec -it 712f1fd1edc9 /bin/bash
root712f1fd1edc9:/usr/local/tomcat# ls -l
total 132
-rw-r--r--. 1 root root 18994 Dec 2 2021 BUILDING.txt
-rw-r--r--. 1 root root 6210 Dec 2 2021 CONTRIBUTING.md
-rw-r--r--. 1 root root 60269 Dec 2 2021 LICENSE
-rw-r--r--. 1 root root 2333 Dec 2 2021 NOTICE
-rw-r--r--. 1 root root 3378 Dec 2 2021 README.md
-rw-r--r--. 1 root root 6905 Dec 2 2021 RELEASE-NOTES
-rw-r--r--. 1 root root 16517 Dec 2 2021 RUNNING.txt
drwxr-xr-x. 2 root root 4096 Dec 22 2021 bin
drwxr-xr-x. 1 root root 22 Nov 4 09:29 conf
drwxr-xr-x. 2 root root 4096 Dec 22 2021 lib
drwxrwxrwx. 1 root root 80 Nov 4 09:29 logs
drwxr-xr-x. 2 root root 159 Dec 22 2021 native-jni-lib
drwxrwxrwx. 2 root root 30 Dec 22 2021 temp
drwxr-xr-x. 2 root root 6 Dec 22 2021 webapps
drwxr-xr-x. 7 root root 81 Dec 2 2021 webapps.dist
drwxrwxrwx. 2 root root 6 Dec 2 2021 work
root712f1fd1edc9:/usr/local/tomcat# rm -r webapps
root712f1fd1edc9:/usr/local/tomcat# ls -l
total 132
-rw-r--r--. 1 root root 18994 Dec 2 2021 BUILDING.txt
-rw-r--r--. 1 root root 6210 Dec 2 2021 CONTRIBUTING.md
-rw-r--r--. 1 root root 60269 Dec 2 2021 LICENSE
-rw-r--r--. 1 root root 2333 Dec 2 2021 NOTICE
-rw-r--r--. 1 root root 3378 Dec 2 2021 README.md
-rw-r--r--. 1 root root 6905 Dec 2 2021 RELEASE-NOTES
-rw-r--r--. 1 root root 16517 Dec 2 2021 RUNNING.txt
drwxr-xr-x. 2 root root 4096 Dec 22 2021 bin
drwxr-xr-x. 1 root root 22 Nov 4 09:29 conf
drwxr-xr-x. 2 root root 4096 Dec 22 2021 lib
drwxrwxrwx. 1 root root 80 Nov 4 09:29 logs
drwxr-xr-x. 2 root root 159 Dec 22 2021 native-jni-lib
drwxrwxrwx. 2 root root 30 Dec 22 2021 temp
drwxr-xr-x. 7 root root 81 Dec 2 2021 webapps.dist
drwxrwxrwx. 2 root root 6 Dec 2 2021 work
root712f1fd1edc9:/usr/local/tomcat# mv webapps.dist webapps
root712f1fd1edc9:/usr/local/tomcat# ls -l
total 132
-rw-r--r--. 1 root root 18994 Dec 2 2021 BUILDING.txt
-rw-r--r--. 1 root root 6210 Dec 2 2021 CONTRIBUTING.md
-rw-r--r--. 1 root root 60269 Dec 2 2021 LICENSE
-rw-r--r--. 1 root root 2333 Dec 2 2021 NOTICE
-rw-r--r--. 1 root root 3378 Dec 2 2021 README.md
-rw-r--r--. 1 root root 6905 Dec 2 2021 RELEASE-NOTES
-rw-r--r--. 1 root root 16517 Dec 2 2021 RUNNING.txt
drwxr-xr-x. 2 root root 4096 Dec 22 2021 bin
drwxr-xr-x. 1 root root 22 Nov 4 09:29 conf
drwxr-xr-x. 2 root root 4096 Dec 22 2021 lib
drwxrwxrwx. 1 root root 80 Nov 4 09:29 logs
drwxr-xr-x. 2 root root 159 Dec 22 2021 native-jni-lib
drwxrwxrwx. 2 root root 30 Dec 22 2021 temp
drwxr-xr-x. 7 root root 81 Dec 2 2021 webapps
drwxrwxrwx. 1 root root 22 Nov 4 09:35 work6免修改版说明
[rootlocalhost ~]# docker run -d -p 8080:8080 --name mytomcat8 billygoo/tomcat8-jdk8
Unable to find image billygoo/tomcat8-jdk8:latest locally
latest: Pulling from billygoo/tomcat8-jdk8
55cbf04beb70: Pull complete
1607093a898c: Pull complete
9a8ea045c926: Pull complete
1290813abd9d: Pull complete
8a6b982ad6d7: Pull complete
abb029e68402: Pull complete
8cd067dc06dc: Pull complete
1b9ce2097b98: Pull complete
d6db5874b692: Pull complete
25b4aa3d52c5: Pull complete
d26b86f009c9: Pull complete
e54998e5e699: Pull complete
4a1e415a3c2e: Pull complete
Digest: sha256:4e21f52d29e3a0baafc18979da2f9725449b54652db69d4cdaef9ba807097e11
Status: Downloaded newer image for billygoo/tomcat8-jdk8:latest
9e448debe4178455e46efe60300c866476907b31a91804e9c28d005952c453f4[rootlocalhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9e448debe417 billygoo/tomcat8-jdk8 catalina.sh run 32 seconds ago Up 30 seconds 0.0.0.0:8080-8080/tcp, :::8080-8080/tcp mytomcat88.2 安装mysql
1docker hub上面查找mysql镜像 2从docker hub上阿里云加速器拉取mysql镜像到本地标签为5.7 3使用mysql5.7镜像创建容器也叫运行镜像 1简单版
[rootlocalhost ~]# docker images mysql:5.7
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 c20987f18b13 22 months ago 448MB# 确保linux服务器上没有mysql端口被启用以免被占用
[rootlocalhost ~]# ps -ef |grep mysql
root 71326 3018 0 14:54 pts/0 00:00:00 grep --colorauto mysql# 使用mysql镜像
[rootlocalhost ~]# docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD123456 -d mysql:5.7
46b5cc68b471e280d3ea10d52034b4f19e282ee0237b6ef69991c571ce1bc2b8
[rootlocalhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
46b5cc68b471 mysql:5.7 docker-entrypoint.s… 2 seconds ago Up 1 second 0.0.0.0:3306-3306/tcp, :::3306-3306/tcp, 33060/tcp modest_hamilton
[rootlocalhost ~]# docker exec -it 46b5cc68b471 /bin/bash
root46b5cc68b471:/# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.36 MySQL Community Server (GPL)Copyright (c) 2000, 2021, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type help; or \h for help. Type \c to clear the current input statement.mysql show databases;
--------------------
| Database |
--------------------
| information_schema |
| mysql |
| performance_schema |
| sys |
--------------------
4 rows in set (0.00 sec)# 建库建表插数据
mysql create database db01;
Query OK, 1 row affected (0.00 sec)mysql use db01;
Database changed
mysql create table t1(id int,name varchar(20));
Query OK, 0 rows affected (0.01 sec)mysql insert into t1 values(1,xx);
Query OK, 1 row affected (0.01 sec)mysql select * from t1;
------------
| id | name |
------------
| 1 | xx |
------------
1 row in set (0.00 sec)2实战版
# 新建mysql容器实例
[rootlocalhost ~]# docker run -d -p 3306:3306 --privilegedtrue -v /mydocker/mysql/log:/var/log/mysql -v /mydocker/mysql/data:/var/lib/mysql -v /mydocker/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD123456 --name mysql mysql:5.7
2f65e6007e58d5fc61a89a7581c5c3b5a662c360eb406c3b4de4b1c0a1768d0f
[rootlocalhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2f65e6007e58 mysql:5.7 docker-entrypoint.s… 6 seconds ago Up 5 seconds 0.0.0.0:3306-3306/tcp, :::3306-3306/tcp, 33060/tcp mysql# 新建my.cnf
[rootlocalhost ~]# cd /mydocker/mysql/conf/
[rootlocalhost conf]# ls
[rootlocalhost conf]# vim my.cnf
[rootlocalhost conf]# cat my.cnf
[client]
default_character_setutf8
[mysqld]
collation_server utf8_general_ci
character_set_server utf8# 重新启动mysql容器实例再重新进入并查看字符编码
[rootlocalhost ~]# docker restart mysql
mysql
[rootlocalhost ~]# docker exec -it mysql /bin/bash
root2f65e6007e58:/# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.36 MySQL Community Server (GPL)Copyright (c) 2000, 2021, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type help; or \h for help. Type \c to clear the current input statement.mysql SHOW VARIABLES LIKE character%;
------------------------------------------------------
| Variable_name | Value |
------------------------------------------------------
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
------------------------------------------------------
8 rows in set (0.01 sec)# 再新建库新建表再插入中文测试
mysql show databases;
--------------------
| Database |
--------------------
| information_schema |
| mysql |
| performance_schema |
| sys |
--------------------
4 rows in set (0.00 sec)mysql create database db01;
Query OK, 1 row affected (0.00 sec)mysql use db01;
Database changed
mysql create table t1(id int,name varchar(20));
Query OK, 0 rows affected (0.00 sec)mysql insert into t1 values(1,sson);
Query OK, 1 row affected (0.00 sec)mysql select * from t1;
------------
| id | name |
------------
| 1 | sson |
------------
1 row in set (0.00 sec)3结论 docker安装完mysql并run出容器后建议请先修改完字符集编码后再新建mysql库-表-插数据。
8.3 安装redis
1从docker hub上阿里云加速器拉取redis镜像到本地标签为6.0.8
[rootlocalhost ~]# docker pull redis:6.0.8
6.0.8: Pulling from library/redis
Digest: sha256:21db12e5ab3cc343e9376d655e8eabbdbe5516801373e95a8a9e66010c5b8819
Status: Image is up to date for redis:6.0.8
docker.io/library/redis:6.0.8
[rootlocalhost ~]# docker images redis:6.0.8
REPOSITORY TAG IMAGE ID CREATED SIZE
redis 6.0.8 16ecd2772934 3 years ago 104MB2在centos宿主机下新建目录/app/redis
[rootlocalhost ~]# mkdir -p /app/redis3先在宿主机上下载一个redis再将redis.conf文件模板拷贝进/app/redis目录下
[rootlocalhost myrides]# wget https://download.redis.io/releases/redis-6.0.8.tar.gz
[rootlocalhost myrides]# tar -zxvf redis-6.0.8.tar.gz
[rootlocalhost myrides]# cd redis-6.0.8/
[rootlocalhost redis-6.0.8]# make
[rootlocalhost ~]# cp /myrides/redis-6.0.8/redis.conf /app/redis/
[rootlocalhost ~]# cd /app/redis/
[rootlocalhost redis]# ll
总用量 84
drwxr-xr-x. 2 polkitd root 6 11月 5 16:08 data
-rw-r--r--. 1 root root 84642 11月 5 16:15 redis.conf4/app/redis目录下修改redis.conf文件
[rootlocalhost redis]# vim redis.conf
// 允许redis外地连接必须注释掉bind 127.0.0.1
# bind 127.0.0.1
// 将daemonize yes注释起来或者daemonize no设置因为该配置和docker run中-d参数冲突会导致容器一直启动失败
# When Redis is supervised by upstart or systemd, this parameter has no impact.
daemonize no5使用redis6.0.8镜像创建容器也叫运行镜像
[rootlocalhost redis]# docker run -d -p 6379:6379 --name myr2 --privilegedtrue -v /app/redis/redis.conf:/etc/redis/redis.conf -v /app/redis/data:/data -d redis:6.0.8 redis-server /etc/redis/redis.conf
1299c3a046e1ecb6837655ee856e77f6af2757e775acd6a5e2eddc03ade7ee5a
[rootlocalhost redis]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1299c3a046e1 redis:6.0.8 docker-entrypoint.s… 4 seconds ago Up 3 seconds 0.0.0.0:6379-6379/tcp, :::6379-6379/tcp myr26测试redis-cli连接上来
[rootlocalhost redis]# docker exec -it myr2 /bin/bash
root1299c3a046e1:/data# redis-cli
127.0.0.1:6379 set k1 v1
OK
127.0.0.1:6379 get k1
v17请证明docker启动使用了我们自己指定的配置文件
// 修改配置文件前
[rootlocalhost redis]# docker exec -it myr2 /bin/bash
root1299c3a046e1:/data# redis-cli
127.0.0.1:6379 set k1 v1
OK
127.0.0.1:6379 get k1
v1
127.0.0.1:6379 select 15
OK
127.0.0.1:6379[15] select 18
(error) ERR DB index is out of range
127.0.0.1:6379[15] exit8测试redis-cli连接上来第2次
// 修改配置文件后
[rootlocalhost redis]# vim redis.conf
......
# dbid is a number between 0 and databases-1
databases 10
......// 重启服务
[rootlocalhost redis]# docker restart myr2
myr2[rootlocalhost redis]# docker exec -it myr2 /bin/bash
root1299c3a046e1:/data# redis-cli
127.0.0.1:6379 get k1
v1
127.0.0.1:6379 select 3
OK
127.0.0.1:6379[3] select 15
(error) ERR DB index is out of range