Docker 实用学习笔记(看这一篇就足够了),java面试题库app推荐

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
img

正文

vm linux centos 原生镜像,隔离,需要开启多个虚拟机, 几个 G,电脑

Docker 镜像(linux + mysql + jdk) 秒级启动

https://docs.docker.com/

https://hub.docker.com/

三、Docker 的安装


  • 你得有一台自己的云服务器,最近双十一有活动,新用户买一年的低配服务器(1核2G)只要 88 元。如果没有购买的可以看看 腾讯云服务器,配置起来相对比阿里云服务器,少一步安全组的操作.

现在是有 windows 的版本的了,可以直接下载安装的 传送门

在这里插入图片描述

一、Docker 的基本组成

3.1 镜像 image

镜像就好比是一个模板,可以通过这个模板来创建容器服务, tomcat 镜像 ===》 run ===》 tomcat01 容器(提供服务器),通过这个镜像可以擦行减多个容器(最终服务运行或者项目运行就是在容器中的)

3.2 容器 container
  • Docker 利用容器技术,独立运行一个或者一组应用,通过镜像来创建

  • 启动,停止,删除,基本命令!

  • 目前可以把这个容器理解为一个简易的 linux 系统(每次安装的时候,都会安装一个最小 Linux 子系统)

3.3 仓库 repository

仓库是存放镜像的地方!

仓库分为共有仓库私有仓库

Docker Hub(默认是国外的)

阿里云。。等等都有容器服务器

安装 Docker

环境准备

  1. Linux 基础

  2. CentOS 7

  3. 使用 xshell 链接远程服务器并操作!

系统内核

[root@VM_0_15_centos /]# uname -r

3.10.0-1062.18.1.el7.x86_64

[root@VM_0_15_centos /]# cat /etc/os-release

NAME=“CentOS Linux”

VERSION=“7 (Core)”

ID=“centos”

ID_LIKE=“rhel fedora”

VERSION_ID=“7”

PRETTY_NAME=“CentOS Linux 7 (Core)”

ANSI_COLOR=“0;31”

CPE_NAME=“cpe:/o:centos:centos:7”

HOME_URL=“https://www.centos.org/”

BUG_REPORT_URL=“https://bugs.centos.org/”

CENTOS_MANTISBT_PROJECT=“CentOS-7”

CENTOS_MANTISBT_PROJECT_VERSION=“7”

REDHAT_SUPPORT_PRODUCT=“centos”

REDHAT_SUPPORT_PRODUCT_VERSION=“7”

帮助文档(https://docs.docker.com/engine/install/centos/)

1. 卸载就得版本

yum remove docker \

docker-client \

docker-client-latest \

docker-common \

docker-latest \

docker-latest-logrotate \

docker-logrotate \

docker-engine

2. 安装依赖环境

yum install -y yum-utils

3. 设置镜像的仓库

yum-config-manager \

–add-repo \

https://download.docker.com/linux/centos/docker-ce.repo # 默认是国外的!

yum-config-manager \

–add-repo \

http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 推荐使用 阿里云镜像

4. 更新软件包的索引

yum makecache fast

5. 安装最新版的 docker 引擎, docker-ce 社区版 ee 企业版 (也可以指定安装不停的版本)

yum install docker-ce docker-ce-cli containerd.io

6. 启动 docker

systemctl start docker

7. 使用 docker version 查看是否启动成功

docker version

8. 启动一个镜像

docer run hello-world

[root@VM_0_15_centos /]# docer run hello-world

-bash: docer: command not found

[root@VM_0_15_centos /]# docker run hello-world

Unable to find image ‘hello-world:latest’ locally

latest: Pulling from library/hello-world

0e03bdcc26d7: Pull complete

Digest: sha256:8c5aeeb6a5f3ba4883347d3747a7249f491766ca1caa47e5da5dfcf6b9b717c0

Status: Downloaded newer image for hello-world:latest

Hello from Docker!

This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:

  1. The Docker client contacted the Docker daemon.

  2. The Docker daemon pulled the “hello-world” image from the Docker Hub.

(amd64)

  1. The Docker daemon created a new container from that image which runs the

executable that produces the output you are currently reading.

  1. The Docker daemon streamed that output to the Docker client, which sent it

to your terminal.

To try something more ambitious, you can run an Ubuntu container with:

$ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:

https://hub.docker.com/

For more examples and ideas, visit:

https://docs.docker.com/get-started/

9. 查看下载好的镜像

docker images

[root@VM_0_15_centos /]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

hello-world latest bf756fb1ae65 9 months ago 13.3kB

设置镜像

[root@VM_0_15_centos /]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

Loaded plugins: fastestmirror, langpacks

Repository epel is listed more than once in the configuration

adding repo from: http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

grabbing file http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo

repo saved to /etc/yum.repos.d/docker-ce.repo

启动信息

[root@VM_0_15_centos /]# systemctl start docker

[root@VM_0_15_centos /]# docker version

Client: Docker Engine - Community

Version: 19.03.13

API version: 1.40

Go version: go1.13.15

Git commit: 4484c46d9d

Built: Wed Sep 16 17:03:45 2020

OS/Arch: linux/amd64

Experimental: false

Server: Docker Engine - Community

Engine:

Version: 19.03.13

API version: 1.40 (minimum version 1.12)

Go version: go1.13.15

Git commit: 4484c46d9d

Built: Wed Sep 16 17:02:21 2020

OS/Arch: linux/amd64

Experimental: false

containerd:

Version: 1.3.7

GitCommit: 8fba4e9a7d01810a393d5d25a3621dc101981175

runc:

Version: 1.0.0-rc10

GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd

docker-init:

Version: 0.18.0

GitCommit: fec3683

卸载 docker

两个步骤完成卸载

Uninstall Docker Engine

Uninstall the Docker Engine, CLI, and Containerd packages:

1. 卸载 docker 一些依赖

yum remove docker-ce docker-ce-cli containerd.io

Images, containers, volumes, or customized configuration files on your host are not automatically removed. To delete all images, containers, and volumes:

2. 删除目录,卸载资源

rm -rf /var/lib/docker

3. docker 的默认工作路径

/var/lib/docker

You must delete any edited configuration files manually.

阿里云镜像加速

  1. 登录阿里云

  2. 找到容器镜像服务

  3. 配置镜像加速器

这里每个人的配置不一样,所以你填写我的是没有效果的

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-‘EOF’

{

“registry-mirrors”: [“https://opszdtgc.mirror.aliyuncs.com”]

}

EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

回顾 helloworld 流程

开始 -> Docker 在本机寻找对象 -> 判断本机是否有这个镜像 -> 没有则去下载 Docker Hub 这个镜像 —> 找不到镜像就返回错误(否则就下载镜像到本地)

底层原理

Docker 是怎么工作的?

Docker 是一个 Client - Server 结构的系统,Docker 的守护进程运行在主机上,通过 Socket 从客户端访问,DockerServer 接收到一个 Docker-Client 的命令,就会执行命令

Docker 为什么比 VM 快

四、Docker 常用命令


4.1 帮助命令

docker version # 显示 docker 的版本信息

docker info # 显示 docker 的系统信息,包括镜像 和 容器的数量

docker 命令 --help # 帮助命令

帮助文档的地址:https://docs.docker.com/engine/reference/run/

4.2 镜像命令(搜索,下载,删除,查看)

docker images 查看所有本地主机上的镜像

[root@VM_0_15_centos ~]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

hello-world latest bf756fb1ae65 9 months ago 13.3kB

解释

REPOSITORY 镜像的仓库源

TAG 镜像的标签

IMAGE ID 镜像的 ID

CREATED 镜像的创建时间

SIZE 镜像的大小

可选项

-a,–all # 列出所有镜像

-q,–quiet # 只显示镜像的 id

docker search 搜索镜像

docker search --help # 查看使用方式,可以避免查询官方文档

可选项

–filter STARS=3000 # 搜索出来的镜像的

[root@VM_0_15_centos ~]# docker search mysql --filter STARS=300

NAME DESCRIPTION STARS OFFICIAL AUTOMATED

mysql MySQL is a widely used, open-source relation… 10065 [OK]

mariadb MariaDB is a community-developed fork of MyS… 3689 [OK]

mysql/mysql-server Optimized MySQL Server Docker images. Create… 736 [OK]

percona Percona Server is a fork of the MySQL relati… 511 [OK]

docker pull 下载镜像

下载镜像 docker pull 镜像名[:tag]

[root@VM_0_15_centos ~]# docker pull mysql

Using default tag: latest # 如果不写 tag:默认就是 latest

latest: Pulling from library/mysql

bb79b6b2107f: Pull complete # 分层下载,docker image的核心,联合文件系统

49e22f6fb9f7: Pull complete

842b1255668c: Pull complete

9f48d1f43000: Pull complete

c693f0615bce: Pull complete

8a621b9dbed2: Pull complete

0807d32aef13: Pull complete

9eb4355ba450: Pull complete

6879faad3b6c: Pull complete

164ef92f3887: Pull complete

6e4a6e666228: Pull complete

d45dea7731ad: Pull complete

Digest: sha256:86b7c83e24c824163927db1016d5ab153a9a04358951be8b236171286e3289a4 # 签名

Status: Downloaded newer image for mysql:latest

docker.io/library/mysql:latest # 真实地址

等价

docker pull mysql

docker pull docker.io/library/mysql:latest

指定版本下载(官方文档指定)

docker pull mysql:5.7

[root@VM_0_15_centos ~]# docker pull mysql:5.7

5.7: Pulling from library/mysql

bb79b6b2107f: Already exists

49e22f6fb9f7: Already exists

842b1255668c: Already exists

9f48d1f43000: Already exists

c693f0615bce: Already exists

8a621b9dbed2: Already exists

0807d32aef13: Already exists

6d2fc69dfa35: Pull complete

56153548dd2c: Pull complete

3bb6ba940303: Pull complete

3e1888da91a7: Pull complete

Digest: sha256:b3dc8d10307ab7b9ca1a7981b1601a67e176408be618fc4216d137be37dae10b

Status: Downloaded newer image for mysql:5.7

docker.io/library/mysql:5.7

docker rmi 删除镜像

根据 ID 删除,也可以同时指定多个 ID

docker rmi -f IMAGE ID,IMAGE ID,IMAGE ID

递归删除所有镜像

docker rmi -f $(docker images -aq)

4.3 容器命令

有了镜像,才可以创建容器,linux,下载一个 centOS 镜像来测试学习

下载 centOS 镜像

docker pull centos

新建容器并启动

docker run [可选参数] image

参数说明

–name=“Name” 容器名称 tomcat01 tomcat02 用来区分容器

-d 后台方式运行

-it 使用交互方式运行,进入容器查看内容

-P 指定容器的端口 -p 8080:8080

-p ip:主机端口:容器端口

-p 主机端口:容器端口 (常用的)

-p 容器端口

-p 随机指定端口

测试 启动并进入容器

[root@VM_0_15_centos ~]# docker run -it centos /bin/bash

[root@f3f9e8b9045f /]# ls # 查看容器内的 centos,基础版本,很多命令都不是完善的

bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var

查看运行中的容器

docker ps

列出所有运行的容器

docker ps 命令

列出当前正在运行的容器

-a # 列出当前正在运行的容器 + 带出历史运行过的容器

-n=7 # 显示最近创建容器的个数

-q # 只显示容器编号

[root@VM_0_15_centos ~]# docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

f3f9e8b9045f centos “/bin/bash” 3 minutes ago Exited (0) About a minute ago festive_hawking

44fe79a9cfc5 bf756fb1ae65 “/hello” 3 hours ago Exited (0) 3 hours ago romantic_pike

退出容器

exit # 直接容器停止并退出

Ctrl + p + q # 容器不停止退出

删除容器

docer rm 容器ID # 删除指定的容器,不能删除正在运行的容器

docer rm -f ${docker ps -aq} # 删除所有的容器

docker ps -a -q |xargs docker rm # 删除所有容器

启动和停止容器

docker start 容器 id # 启动容器

docker restart 容器id #

docker stop 容器id

docker kill 容器id

4.4 常用其他命令

后台启动容器

[root@VM_0_15_centos ~]# docker run -d centos

091ca119820ea987ca43ae2f608a628ce2c2af9cb364274a3eadfb65f93ffa8d

[root@VM_0_15_centos ~]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

[root@VM_0_15_centos ~]#

问题 docker ps,发现 centos 停止了

常见的坑,docker 容器使用后台运行,就必须要有一个前台进行,docker 发现没有应用,就会自动停止

nginx. 容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了

查看日志

docker logs -f -t --tail 容器,没有日志

自己编写一段 shell 脚本

docker ps

显示日志

-tf # 显示日志

–tail number # 显示日志的条数

docker logs -tf --tail 10 容器 ID

查看容器中进程的信息 ps

docker top

[root@VM_0_15_centos ~]# docker top 3e77e2715543

UID PID PPID C STIME TTY TIME CMD

root 31464 31448 0 15:28 pts/0 00:00:00 /bin/bash

[root@VM_0_15_centos ~]#

查看镜像的元数据

命令

docker inspect 容器id

测试

[

{

“Id”: “3e77e2715543f551edcdda1f0276e9602159b58d2c4f414792c23e9fa2f7b762”,

“Created”: “2020-10-17T07:28:43.374939473Z”,

“Path”: “/bin/bash”,

“Args”: [],

“State”: {

“Status”: “running”,

“Running”: true,

“Paused”: false,

“Restarting”: false,

“OOMKilled”: false,

“Dead”: false,

“Pid”: 31464,

“ExitCode”: 0,

“Error”: “”,

“StartedAt”: “2020-10-17T07:28:43.71609384Z”,

“FinishedAt”: “0001-01-01T00:00:00Z”

},

“Image”: “sha256:0d120b6ccaa8c5e149176798b3501d4dd1885f961922497cd0abef155c869566”,

“ResolvConfPath”: “/var/lib/docker/containers/3e77e2715543f551edcdda1f0276e9602159b58d2c4f414792c23e9fa2f7b762/resolv.conf”,

“HostnamePath”: “/var/lib/docker/containers/3e77e2715543f551edcdda1f0276e9602159b58d2c4f414792c23e9fa2f7b762/hostname”,

“HostsPath”: “/var/lib/docker/containers/3e77e2715543f551edcdda1f0276e9602159b58d2c4f414792c23e9fa2f7b762/hosts”,

“LogPath”: “/var/lib/docker/containers/3e77e2715543f551edcdda1f0276e9602159b58d2c4f414792c23e9fa2f7b762/3e77e2715543f551edcdda1f0276e9602159b58d2c4f414792c23e9fa2f7b762-json.log”,

“Name”: “/admiring_visvesvaraya”,

“RestartCount”: 0,

“Driver”: “overlay2”,

“Platform”: “linux”,

“MountLabel”: “”,

“ProcessLabel”: “”,

“AppArmorProfile”: “”,

“ExecIDs”: null,

“HostConfig”: {

“Binds”: null,

“ContainerIDFile”: “”,

“LogConfig”: {

“Type”: “json-file”,

“Config”: {}

},

“NetworkMode”: “default”,

“PortBindings”: {},

“RestartPolicy”: {

“Name”: “no”,

“MaximumRetryCount”: 0

},

“AutoRemove”: false,

“VolumeDriver”: “”,

“VolumesFrom”: null,

“CapAdd”: null,

“CapDrop”: null,

“Capabilities”: null,

“Dns”: [],

“DnsOptions”: [],

“DnsSearch”: [],

“ExtraHosts”: null,

“GroupAdd”: null,

“IpcMode”: “private”,

“Cgroup”: “”,

“Links”: null,

“OomScoreAdj”: 0,

“PidMode”: “”,

“Privileged”: false,

“PublishAllPorts”: false,

“ReadonlyRootfs”: false,

“SecurityOpt”: null,

“UTSMode”: “”,

“UsernsMode”: “”,

“ShmSize”: 67108864,

“Runtime”: “runc”,

“ConsoleSize”: [

0,

0

],

“Isolation”: “”,

“CpuShares”: 0,

“Memory”: 0,

“NanoCpus”: 0,

“CgroupParent”: “”,

“BlkioWeight”: 0,

“BlkioWeightDevice”: [],

“BlkioDeviceReadBps”: null,

“BlkioDeviceWriteBps”: null,

“BlkioDeviceReadIOps”: null,

“BlkioDeviceWriteIOps”: null,

“CpuPeriod”: 0,

“CpuQuota”: 0,

“CpuRealtimePeriod”: 0,

“CpuRealtimeRuntime”: 0,

“CpusetCpus”: “”,

“CpusetMems”: “”,

“Devices”: [],

“DeviceCgroupRules”: null,

“DeviceRequests”: null,

“KernelMemory”: 0,

“KernelMemoryTCP”: 0,

“MemoryReservation”: 0,

“MemorySwap”: 0,

“MemorySwappiness”: null,

“OomKillDisable”: false,

“PidsLimit”: null,

“Ulimits”: null,

“CpuCount”: 0,

“CpuPercent”: 0,

“IOMaximumIOps”: 0,

“IOMaximumBandwidth”: 0,

“MaskedPaths”: [

“/proc/asound”,

“/proc/acpi”,

“/proc/kcore”,

“/proc/keys”,

“/proc/latency_stats”,

“/proc/timer_list”,

“/proc/timer_stats”,

“/proc/sched_debug”,

“/proc/scsi”,

“/sys/firmware”

],

“ReadonlyPaths”: [

“/proc/bus”,

“/proc/fs”,

“/proc/irq”,

“/proc/sys”,

“/proc/sysrq-trigger”

]

},

“GraphDriver”: {

“Data”: {

“LowerDir”: “/var/lib/docker/overlay2/f8794c646517a8e6206cc81948002a34d94b7a4b7ee68392a16829a840c6dd40-init/diff:/var/lib/docker/overlay2/f99f2fb61401e6e3d9e3fa4b33ae3f5f92bf5f574910e28b6509fac39636be19/diff”,

“MergedDir”: “/var/lib/docker/overlay2/f8794c646517a8e6206cc81948002a34d94b7a4b7ee68392a16829a840c6dd40/merged”,

“UpperDir”: “/var/lib/docker/overlay2/f8794c646517a8e6206cc81948002a34d94b7a4b7ee68392a16829a840c6dd40/diff”,

“WorkDir”: “/var/lib/docker/overlay2/f8794c646517a8e6206cc81948002a34d94b7a4b7ee68392a16829a840c6dd40/work”

},

“Name”: “overlay2”

},

“Mounts”: [],

“Config”: {

“Hostname”: “3e77e2715543”,

“Domainname”: “”,

“User”: “”,

“AttachStdin”: true,

“AttachStdout”: true,

“AttachStderr”: true,

“Tty”: true,

“OpenStdin”: true,

“StdinOnce”: true,

“Env”: [

“PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin”

],

“Cmd”: [

“/bin/bash”

],

“Image”: “centos”,

“Volumes”: null,

“WorkingDir”: “”,

“Entrypoint”: null,

“OnBuild”: null,

“Labels”: {

“org.label-schema.build-date”: “20200809”,

“org.label-schema.license”: “GPLv2”,

“org.label-schema.name”: “CentOS Base Image”,

“org.label-schema.schema-version”: “1.0”,

“org.label-schema.vendor”: “CentOS”

}

},

“NetworkSettings”: {

“Bridge”: “”,

“SandboxID”: “ff477eace5c8906f5fd01d86fc7737179f8fbf13cf4cae35499a1ebd98a070dd”,

“HairpinMode”: false,

“LinkLocalIPv6Address”: “”,

“LinkLocalIPv6PrefixLen”: 0,

“Ports”: {},

“SandboxKey”: “/var/run/docker/netns/ff477eace5c8”,

“SecondaryIPAddresses”: null,

“SecondaryIPv6Addresses”: null,

“EndpointID”: “5457cf149d34d8937295e72b2a8efb47830e18812a87c0afb2ff773f4d9be760”,

“Gateway”: “172.18.0.1”,

“GlobalIPv6Address”: “”,

“GlobalIPv6PrefixLen”: 0,

“IPAddress”: “172.18.0.2”,

“IPPrefixLen”: 16,

“IPv6Gateway”: “”,

“MacAddress”: “02:42:ac:12:00:02”,

“Networks”: {

“bridge”: {

“IPAMConfig”: null,

“Links”: null,

“Aliases”: null,

“NetworkID”: “457b5829b14f034c35472c80dd6ec2ab1b9666fac95bbbcdf41f23226918ac6a”,

“EndpointID”: “5457cf149d34d8937295e72b2a8efb47830e18812a87c0afb2ff773f4d9be760”,

“Gateway”: “172.18.0.1”,

“IPAddress”: “172.18.0.2”,

“IPPrefixLen”: 16,

“IPv6Gateway”: “”,

“GlobalIPv6Address”: “”,

“GlobalIPv6PrefixLen”: 0,

“MacAddress”: “02:42:ac:12:00:02”,

“DriverOpts”: null

}

}

}

}

]

进入当前正在运行的容器 (exec)

我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置

命令

docker exec -it 容器id /bin/bash /sh

[root@VM_0_15_centos ~]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

3e77e2715543 centos “/bin/bash” 12 minutes ago Up 12 minutes admiring_visvesvaraya

[root@VM_0_15_centos ~]# docker exec -it 3e77e2715543 /bin/bash

[root@3e77e2715543 /]# ps -ef

UID PID PPID C STIME TTY TIME CMD

root 1 0 0 07:28 pts/0 00:00:00 /bin/bash

root 19 0 0 07:41 pts/1 00:00:00 /bin/bash

root 32 19 0 07:41 pts/1 00:00:00 ps -ef

方式二

docker attach 容器Id # 进入当前正在进行的命令行

docker exec # 进入容器后开启一个新的终端,可以在里面操作(常用)

docker attach # 进入容器正在执行的终端,不会启动新的进程!

从容器内拷贝文件到主机上

docker cp 容器id: 容器内路径 主机路径

[root@VM_0_15_centos ~]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

ed828f6c65d8 centos “/bin/bash” 8 minutes ago Up 8 minutes beautiful_swanson

[root@VM_0_15_centos ~]# docker attach 3e77e2715543

You cannot attach to a stopped container, start it first

[root@VM_0_15_centos ~]# docker attach ed828f6c65d8

[root@ed828f6c65d8 home]# ls

a.java

ctrl + p + q 后台运行

[root@VM_0_15_centos ~]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

ed828f6c65d8 centos “/bin/bash” 9 minutes ago Up 9 minutes beautiful_swanson

[root@VM_0_15_centos ~]# cd /home/

[root@VM_0_15_centos home]# ls

apache-tomcat-9.0.30 java node Python-3.7.1 Python-3.7.1.tgz wget-log

[root@VM_0_15_centos home]# mkdir docker

[root@VM_0_15_centos home]# ls

apache-tomcat-9.0.30 docker java node Python-3.7.1 Python-3.7.1.tgz wget-log

[root@VM_0_15_centos ~]# docker cp ed828f6c65d8:/home/a.java /home/docker/

[root@VM_0_15_centos ~]# cd /home/

[root@VM_0_15_centos home]# cd docker/

[root@VM_0_15_centos docker]# ls

a.java

拷贝是一个手动过程,未来我们使用 -V 卷的技术,可以实现同步 /home

4.5 命令小结

五、Docker 常见环境


5.1 Docker 安装 Nginx

1. 搜索镜像 search, 建议去 docker 搜索,可以看到帮助文档

docker search nginx

2. 下载镜像

docker pull nginx

3. 启动 镜像, 运行测试

-d 后台运行

–name 给容器命名

-p 宿主机端口,容器内部端口

docker run -d --name nginx01 -p 3344:80 nginx

PS C:\Users\伟\Desktop> docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS

NAMES

ace069bcdcaa nginx “/docker-entrypoint.…” About a minute ago Up About a minute 0.0.0.0:3344->80/tcp nginx01

进入容器

PS C:\Users\伟\Desktop> docker exec -it nginx01 /bin/bash

root@ace069bcdcaa:/# whereis nginx

nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx

root@ace069bcdcaa:/# cd /etc/nginx

root@ace069bcdcaa:/etc/nginx# ls

conf.d fastcgi_params koi-utf koi-win mime.types modules nginx.conf scgi_params uwsgi_params win-utf

root@ace069bcdcaa:/etc/nginx#

5.2 Docker安装 Tomcat

官方的用法,一次性,用完即删

docker run -it --rm tomcat:9.0

我们之前的启动的都是后台,停止了容器之后,容器还可以查到 docker run -it --rm, 一般用来测试,用完删除

下载tomcat

docker pull tomcat:9.0 tomcat

启动运行

docker run -d -p 3355:8080 --name tomcat01 tomcat

测试访问没有问题

curl localhost:3355

进入容器

docker exec -it tomcat01 /bin/bash

发现问题

  1. linux 命令少了

  2. 没有 webapps

  3. 阿里云镜像原因,默认是最小的镜像,所有的不必要的被剔除

[root@VM_0_15_centos ~]# docker exec -it tomcat01 /bin/bash

root@79dd7b818e4c:/usr/local/tomcat# ls

BUILDING.txt CONTRIBUTING.md LICENSE NOTICE README.md RELEASE-NOTES RUNNING.txt bin conf lib logs native-jni-lib temp webapps webapps.dist work

root@79dd7b818e4c:/usr/local/tomcat# cp webapps.dist/* webapps/

cp: -r not specified; omitting directory ‘webapps.dist/ROOT’

cp: -r not specified; omitting directory ‘webapps.dist/docs’

cp: -r not specified; omitting directory ‘webapps.dist/examples’

cp: -r not specified; omitting directory ‘webapps.dist/host-manager’

cp: -r not specified; omitting directory ‘webapps.dist/manager’

root@79dd7b818e4c:/usr/local/tomcat# cp -r webapps.dist/* webapps/

root@79dd7b818e4c:/usr/local/tomcat# cd webapps

以后部署项目,每次都要进入容器十分麻烦?是否可以在容器外部提供一个映射路径,达到在容器修改文件名 webapps,我们在外部防止项目,就自动同步到内部就好了

5.3 部署 es + kibna (16节跳过)

5.4 docker 安装 mysql

MySQL 数据持久化的问题

下载 5.7

1. 获取镜像

docker pull mysql:5.7

2. 启动 MYSQL

-d 后台运行

-p 端口映射 本地端口:docker内部端口

-v 卷挂载

-e 环境配置

–name 容器名字

docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root --name mysql01 mysql:5.7

下载 8.0

docker pull mysql:8.0

docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root --name mysql8_use mysql:8.0

修改密码,mysql8 的编码问题,导致无法远程连接

docker exec -it 容器id /bin/bash

mysql -uroot -proot

ALTER USER ‘root’@‘%’ IDENTIFIED WITH mysql_native_password BY ‘root’;

FLUSH PRIVILEGES;

然后就可以远程连接了

六、可视化软件


portainer (先用这个)

  • Docker 的一个图形化界面管理工具,提供一个后台面板,供我们操作

Rancher(CI/CD)

七、Docker 镜像讲解


7.1 镜像是什么

镜像是一种轻量级,可执行的独立软件包,用来打包软件运行环境 和 基于运行环境开发的软件

所有的应用,直接打包 docker 镜像,就可以直接跑起来

如何得到镜像:

  • 从远程仓库下载

  • 朋友拷贝给你

  • 自己制作一个镜像 DockerFile

7.3 Docker 镜像加载原理

UnionFS (联合文件系统)

Docker 的镜像实际由一层一层的文件系统组成,这种层级的文件系统 UnionFS

虚拟机分钟级启动

容器是秒级启动

八、提交镜像


8.1 commit 镜像

docker commit 提交容器成为一个新的副本

同 git

docker commit -m=‘描述提交的信息’ -a=“作者” 容器 id 目标镜像名:[TAG]

实战测试

启动一个默认的 tomcat

发现这个默认的 tomcat 是没有 webapss应用, webapss 是没有文件的

我将文件进行了 拷贝

将我们操作过的容器通过 commit 提交作为一个镜像! 我们以后使用我没呢修改过的镜像即可

docker commit -a=“Gorit” -m=“add webapps” images ID 修改过的容器名称:1.0

保存当前容器的状态,可以通过 commit 提交,获得一个镜像,就好比云服务器的快照

九、容器数据卷


9.1 容器数据卷的概念

docker 的理念:

  • 将应用于环境打包成一个镜像

  • 数据?如果数据都在容器中,那么我们容器删除,数据就会丢失!需求:数据持久化

  • MySQL,容易删除,删库跑路! 需求:MySQL 数据可以存储在本地!

容器之间有一个可以数据共享的技术! Docker 容器中产生的数据,同步到本地!

这就是卷技术! 目录的挂载,将容器中的目录,挂载在 Linux 上面!

总结:容器的持久化和他同步操作!容器间也是可以数据共享的

9.2 使用数据卷

方式一 : 直接使用命令来挂载 -v

docker run -it -v 主机目录: 容器内目录

测试

docker run -it -v /home/ceshi:/home centos /bin/bash

容器之间的同步是双向的,我们以后只需要在本地修改即可,容器自动同步

9.3 MySQL 挂载实战

9.4 具名和匿名挂载

匿名挂载

docker run -d -P --name nginx01 -v /etc/nginx nginx

查看所有的 volumn 的情况

docker volume ls

这里i发现,这种就是匿名的,我们在 -v 只写了容器内的路径,没有容器外的路径

具名挂载

docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx

docker volume ls

DRIVER VOLUME NAME

local juming-nginx

通过 -v 卷名:容器内路径

查看一下这个卷

docker volume insepect juming-nginx

总结

以上是字节二面的一些问题,面完之后其实挺后悔的,没有提前把各个知识点都复习到位。现在重新好好复习手上的面试大全资料(含JAVA、MySQL、算法、Redis、JVM、架构、中间件、RabbitMQ、设计模式、Spring等),现在起闭关修炼半个月,争取早日上岸!!!

下面给大家分享下我的面试大全资料

  • 第一份是我的后端JAVA面试大全

image.png

后端JAVA面试大全

  • 第二份是MySQL+Redis学习笔记+算法+JVM+JAVA核心知识整理

字节二面拜倒在“数据库”脚下,闭关修炼半个月,我还有机会吗?

MySQL+Redis学习笔记算法+JVM+JAVA核心知识整理

  • 第三份是Spring全家桶资料

字节二面拜倒在“数据库”脚下,闭关修炼半个月,我还有机会吗?

MySQL+Redis学习笔记算法+JVM+JAVA核心知识整理

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

启动一个默认的 tomcat

发现这个默认的 tomcat 是没有 webapss应用, webapss 是没有文件的

我将文件进行了 拷贝

将我们操作过的容器通过 commit 提交作为一个镜像! 我们以后使用我没呢修改过的镜像即可

docker commit -a=“Gorit” -m=“add webapps” images ID 修改过的容器名称:1.0

保存当前容器的状态,可以通过 commit 提交,获得一个镜像,就好比云服务器的快照

九、容器数据卷


9.1 容器数据卷的概念

docker 的理念:

  • 将应用于环境打包成一个镜像

  • 数据?如果数据都在容器中,那么我们容器删除,数据就会丢失!需求:数据持久化

  • MySQL,容易删除,删库跑路! 需求:MySQL 数据可以存储在本地!

容器之间有一个可以数据共享的技术! Docker 容器中产生的数据,同步到本地!

这就是卷技术! 目录的挂载,将容器中的目录,挂载在 Linux 上面!

总结:容器的持久化和他同步操作!容器间也是可以数据共享的

9.2 使用数据卷

方式一 : 直接使用命令来挂载 -v

docker run -it -v 主机目录: 容器内目录

测试

docker run -it -v /home/ceshi:/home centos /bin/bash

容器之间的同步是双向的,我们以后只需要在本地修改即可,容器自动同步

9.3 MySQL 挂载实战

9.4 具名和匿名挂载

匿名挂载

docker run -d -P --name nginx01 -v /etc/nginx nginx

查看所有的 volumn 的情况

docker volume ls

这里i发现,这种就是匿名的,我们在 -v 只写了容器内的路径,没有容器外的路径

具名挂载

docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx

docker volume ls

DRIVER VOLUME NAME

local juming-nginx

通过 -v 卷名:容器内路径

查看一下这个卷

docker volume insepect juming-nginx

总结

以上是字节二面的一些问题,面完之后其实挺后悔的,没有提前把各个知识点都复习到位。现在重新好好复习手上的面试大全资料(含JAVA、MySQL、算法、Redis、JVM、架构、中间件、RabbitMQ、设计模式、Spring等),现在起闭关修炼半个月,争取早日上岸!!!

下面给大家分享下我的面试大全资料

  • 第一份是我的后端JAVA面试大全

[外链图片转存中…(img-8Aognm8N-1713599083436)]

后端JAVA面试大全

  • 第二份是MySQL+Redis学习笔记+算法+JVM+JAVA核心知识整理

[外链图片转存中…(img-MlBMj0br-1713599083436)]

MySQL+Redis学习笔记算法+JVM+JAVA核心知识整理

  • 第三份是Spring全家桶资料

[外链图片转存中…(img-FzJRA5M4-1713599083437)]

MySQL+Redis学习笔记算法+JVM+JAVA核心知识整理

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-dO9UYUwl-1713599083438)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 13
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值