Docker学习笔记01

Docker学习

  1. Docker的概述

  2. Docker的安装

  3. Docker的命令

    1. 镜像命令

    2. 容器命令

    3. 操作命令

    4. 。。。

  4. Docker镜像

  5. 容器数据卷

  6. DockerFile

  7. Docker网络原理

  8. IDEA整合Docker

  9. Docker Compose'

  10. Docker Swarm

  11. CI\CD Jenkins

Docker概述

Docker为什么会出现?

开发--线上,应用环境和业务环境--》自己的环境

需要各种环境配置

发布项目(包括各种环境),项目和环境一起打包迁移。

有些开发环境与其他环境不能跨平台。

传统:jar包--》运维去部署

现在:开发--打包部署上线,一套流程做完。

Docker解决上面带来的问题

java-- apk -- 发布(应用商店) --使用APK --安装即可

java --jar (环境)-- 打包项目带上环境(镜像)--(Docker仓库:商店)--下载我们发布的镜像--直接允许即可(镜像机制)

Dockerd的思想就来自于集装箱!

JRE-- 多个应用(端口冲突)--原来都是交叉的

隔离:Docker的核心思想!打包装箱!每个箱子都是相互隔离的

Docker通过隔离机制,可以将服务器利用到极致.

本质:所有的技术都是因为出现了问题,我们需要去解决,漕渠学习

Docker的历史

2010,几个IT年轻人,成立一家dotCloud

做一些pass的云计算服务!LXC有关的容器技术!

Vmware的应用--笨重--

他们将自己的技术(容器化技术)命名, 就是Docker!

Docker刚刚诞生的时候并没有引起行业的注意,dotCloud!--活不下去

开源

开发源代码

2013年,Docker开源

Docker越来越多的人发现的Docker的优点! 火力,Docker每个月都会更新一个版本.

2014年4月9号,Docker 1.0发布!

Docker为啥这么火, 十分轻巧

在容器技术出来之前,我们使用的都是虚拟机技术.

虚拟机:在windows中装一个Vmware,通过在这个软件上虚拟出来一个单独的电脑!相当与一个真实的电脑!笨重!

虚拟机也是一种虚拟化技术,Docker容器技术,也是虚拟化技术

 VM:linux centos原生镜像(一个电脑)  隔离,需要开启多个虚拟机 几个G 几分钟docker:隔离,镜像(最核心的环境 4m+jdk + mysql )十分的小巧,运行镜像即可 小巧 各个M KB 秒级启动

聊聊Docker

Docker 是基于GO语言开发的,开源项目

官网:https://www.docker.com/

文档:https://docs.docker.com/

仓库地址:https://hub.docker.com/

Docker可以做什么

之前的虚拟机:

缺点:

  1. 资源占用非常多

  2. 冗余步骤多

  3. 启动很慢

容器化技术

比较Docker和虚拟机技术的不同

  1. 传统的虚拟机,虚拟出来一套硬件,运行一个完整的操作系统,软后在系统上安装和运行软件

  2. 容器内的应用直接运行在 宿主机上,容器是没有自己的内核,也没有虚拟的我们的硬件,所以就轻便了

  3. 每个容器间,是相互隔离的,每一个容器都有一个属于自己的文件系统,互不影响

DevOps(开发 运维)

应用跟快速的交付和部署

传统:一堆帮助文档,安装程序

Docker:打包镜像发布测试,一键运行

跟边界的升级和缩容

使用Docker之后,我们部署应用就像搭积木一样

项目打包一个镜像,扩展 服务器A 服务器B

更简单的系统运维

在容器化之后,我们的开发,测试环境都是高度是一致的

跟高效的计算资源利用

Docker是 内核级别的虚拟化,可以在一个物理机上可以运行很多个容器实例,服务器的性能可以被压榨到极致

Docker的安装

Docker的基本组成

镜像(image):

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

容器(container)

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

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

目前就可以把这个容器理解为一个简单的Linux系统

仓库(repositor)

仓库就是存放镜像的地方!

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

Docker Hub(默认是国外的)

阿里云...都有容器服务器(配置镜像加速 ! )

安装Docker

环境的准备

  1. 需要会一点点的Linux基础

  2. Centos的基础

  3. 使用MobaXterm连接服务器进行操作!

环境的查看

 # 系统的内核是3.10以上的
 [root@localhost ~]# uname -r3.10.0-327.el7.x86_64 

 #系统的版本[root@localhost ~]# cat /etc/os-releaseNAME="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/

安装文档:https://blog.csdn.net/weixin_39477597/article/details/87715899

#Step1.检查是否安装过 docker :yum list installed|grep docker #使用命令 yum -y remove docker-ce.x86_64  卸载#删除存储目录# rm -rf /etc/docker# rm -rf /run/docker# rm -rf /var/lib/dockershim# rm -rf /var/lib/docker#Step2. 使用命令 uname-r 检查centOs的内核版本 docker要求centOs的内核版本在3.10 以上#Step3. 移除旧版本: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#Step4. 安装必要的系统工具:sudo yum install -y yum-utils device-mapper-persistent-data lvm2​#1.卸载旧的版本sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine#2.需要安装的安装包sudo yum install -y yum-utils#3.设置镜像的仓库(国外)sudo yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo  #默认是国外的sudo yum-config-manager \--add-repo \http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  #推荐使用国内的镜像资源.比较快​#建议事先 更新yum 的软件包的索引[root@localhost ~]# yum makecache fast​#4.安装docker相关的引擎 docker-ce 社区 ee企业版sudo yum install docker-ce docker-ce-cli containerd.io#安装docker-ce : sudo yum -y install docker-ce ​#5.启动Dockersudo systemctl start docker​#6.使用Docker version来测试是否启动成功docker version

  #7.hello-worlddocker run hello-world

 #8.查看一下 下载的这个hello-world镜像

了解:卸载docker

 #1.卸载依赖yum remove docker-ce docker-ce-cli containerd.io​#2.删除资源rm -rf /var/lib/docker ​# /var/lib/docker docker的默认工作路径

阿里云镜像加速

  1. 登陆阿里云地址;https://homenew.console.aliyun.com/home/dashboard/ProductAndService

    1. 找到容器镜像服务

2.找到镜像加速器

3.配置使用

 sudo mkdir -p /etc/docker​sudo tee /etc/docker/daemon.json <<-'EOF'{"registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]}EOF​sudo systemctl daemon-reload​sudo systemctl restart docker

回顾HelloWorld的流程

底层原理

Docker是怎么工作的?

Docker是一个Client - Server 结构的系统,Docker的守护进程运行在主机上,通过Socket从客户端访问的.

DockerServer接收到Docker-Client的指令 , 就会执行这个命令!

Docker为什么比虚拟机Vmware 快?

  1. Docker有着比虚拟机更少的抽象层.

  2. docker利用的是宿主机的内核,vm需要是Guest OS

所以说,新建一个容器的时候,docker不需要像虚拟机一样重新加载一个操作系统的内核.避免引导.虚拟机是加载Guest OS,分钟级别的,而Docker是利用宿主机的操作需要,省略了这个复杂的过程.秒级!

Docker的常用的命令

帮助命令

docker version #显示docker的详细信息
docker info       #显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help  #万能命令,帮助文档.

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

镜像命令

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

[root@localhost yum.repos.d]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED      SIZE
hello-world   latest    d1165f221234   3 days ago   13.3kB#解释
REPOSITORY  镜像的仓库源
TAG            镜像的标签
IMAGE ID    镜像的ID
CREATED        镜像的创建时间
SIZE        镜像的大小#可选项
[root@localhost yum.repos.d]# docker images --help
Usage:  docker images [OPTIONS] [REPOSITORY[:TAG]]
List images
Options:-a, --all             Show all images (default hides intermediate images)#列出所有镜像--digests         Show digests-f, --filter filter   Filter output based on conditions provided--format string   Pretty-print images using a Go template--no-trunc        Don't truncate output-q, --quiet           Only show image IDs        #只显示镜像的ID

docker search 搜索镜像

[root@localhost]# docker search mysql
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   10589     [OK]
mariadb                           MariaDB Server is a high performing open sou…   3963      [OK]
mysql/mysql-server                Optimized MySQL Server Docker images. Create…   778 #可选项,通过搜索来过滤
[root@localhost]# docker search mysql --helpUsage:  docker search [OPTIONS] TERMSearch the Docker Hub for imagesOptions:-f, --filter filter   Filter output based on conditions provided--format string   Pretty-print search using a Go template--limit int       Max number of search results (default 25)--no-trunc        Don't truncate output--fileter=STARS=3000    #搜索出来的镜像就是STARS大于30000的

docker pull 下载镜像

#下载镜像 doker pull 镜像名字[:tag]
[root@localhost ~]# docker pull --helpUsage:  docker pull [OPTIONS] NAME[:TAG|@DIGEST]Pull an image or a repository from a registryOptions:-a, --all-tags                Download all tagged images in the repository--disable-content-trust   Skip image verification (default true)--platform string         Set platform if server is multi-platform capable-q, --quiet                   Suppress verbose output[root@localhost ~]# docker pull mysql
Using default tag: latest        #如果不写 tag ,默认就是latest最高版本
latest: Pulling from library/mysql
a076a628af6f: Pull complete        #分层下载,docker images的核心 联合文件系统
f6c208f3f991: Pull complete
88a9455a9165: Pull complete
406c9b8427c6: Pull complete
7c88599c0b25: Pull complete
25b5c6debdaf: Pull complete
43a5816f1617: Pull complete
1a8c919e89bf: Pull complete
9f3cf4bd1a07: Extracting  56.82MB/113.1MB
80539cea118d: Download complete
9f3cf4bd1a07: Pull complete
80539cea118d: Pull complete
201b3cad54ce: Pull complete
944ba37e1c06: Pull complete
Digest: sha256:feada149cb8ff54eade1336da7c1d080c4a1c7ed82b5e320efb5beebed85ae8c    #签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest    #真实地址#等价
docker pull MySQL
dockers pull docker.io/library/mysql:latest#指定版本下载
[root@localhost ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
a076a628af6f: Already exists
f6c208f3f991: Already exists
88a9455a9165: Already exists
406c9b8427c6: Already exists
7c88599c0b25: Already exists
25b5c6debdaf: Already exists
43a5816f1617: Already exists
1831ac1245f4: Pull complete
37677b8c1f79: Pull complete
27e4ac3b0f6e: Pull complete
7227baa8c445: Pull complete
Digest: sha256:b3d1eff023f698cd433695c9506171f0d08a8f92a0c8063c1a4d9db9a55808df
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7

docker rmi -f 删除镜像命令

[root@localhost ~]# docker rmi --helpUsage:  docker rmi [OPTIONS] IMAGE [IMAGE...]Remove one or more imagesOptions:-f, --force      Force removal of the image--no-prune   Do not delete untagged parents[root@localhost ~]# docker rmi -f 镜像的id  #删除指定的容器
[root@localhost ~]# docker rmi -f i镜像的id 容器的id 容器的id #删除多个容器
[root@localhost ~]# docker rmi -f $(docker images -aq)  #删除全部的容器

容器命令

说明:我们有了镜像才可以创建容器,linux,下载一个centos 镜像来测试学习

docker pull centos

新建容器并启动

docker run [可选参数] image#参数说明--name="name"    容器名字 tomcat01 tomcat02,用来区分容器
-d                后台方式运行
-it                使用交互方式运行,进入容器查看内容
-p                指定容器的端口 -p 8080:8080-p ip:主机端口:容器端口-p 主机端口:容器端口(常用)-p 容器端口容器端口
-P                随机指定端口#测试,启动并进入容器
docker run -it centos /bin/bash
[root@localhost ~]# docker run -it centos /bin/bash
[root@69b33819a9fe /]# ls
bin  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr
#从容器中退出主机
[root@69b33819a9fe /]# exit

列出所有的运行的容器

#docker ps 命令#列出当前正在运行的容器
-a    #列出当前正在运行的容器,和历史运行过的容器
-n=?    #显示最近创建的容器
-q        #显示容器的编号
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE         COMMAND       CREATED         STATUS                            PORTS     NAMES
69b33819a9fe   centos        "/bin/bash"   2 minutes ago   Exited (130) About a minute ago             gracious_lamarr
768d934f05a3   hello-world   "/hello"      38 hours ago    Exited (0) 38 hours ago                     great_davinci

退出容器

exit #直接容器退出并停止
Ctrl + P + Q    #退出不停止容器

删除容器

docker rm 容器 id                    #删除指定的容器,不能删除正在运行的容器,如果要强制删除 rm -f
docker rm -f $(docker ps -aq)     #删除所有的容器
dockr ps -a -q|xargs docker rm     #删除所有的容器

启动和停止容器的操作

docker start 容器id     #启动容器
docker stop 容器id     #停止当前正在运行的容器
docker restart 容器id #重启容器
docker kill 容器id     #强制停止当前容器

常用的其他命令

后台启动容器

#命令 docker run -d 镜像名[root@localhost ~]# docker run -d centos
# 问题docker ps ,发现 centos 停止了#常见的坑:docker 容器使用后台运行,就必须要有一个前台进行,docker发现没有应用,就会自动停止
#nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序

查看日志

docker log -f -t --tail 条数 镜像id #容器,没有日志
[root@localhost ~]# docker logs --help
Usage:  docker logs [OPTIONS] CONTAINER
Fetch the logs of a container
Options:--details        Show extra details provided to logs-f, --follow         Follow log output--since string   Show logs since timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42mfor 42 minutes)-n, --tail string    Number of lines to show from the end of the logs (default "all")-t, --timestamps     Show timestamps--until string   Show logs before a timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g.42m for 42 minutes)#编写一段脚本
while true;do echo cai007;sleep 1;done
[root@localhost ~]#docker run -d centos /bin/sh -c "while true;do echo cai007;sleep 1;done"[root@localhost ~]# docker ps#显示日志
--tf                 #显示全部日志
--tail number         #显示日志条数
[root@localhost ~]# docker logs -t -f --tail 10 300e315adb2f

查看容器中的进程信息ps

#命令 docker top 容器id
[root@localhost ~]# docker top 1b51c68d06bb
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                7352                7332                0                   10:09               pts/0               00:00:00   

查看镜像的元数据

#命令
docker inspect 容器id#测试
[root@localhost ~]# docker inspect 1b51c68d06bb
[{"Id": "1b51c68d06bbf5a43c7a9b524ae7199b2ba15df66eb5038947962be55065084f","Created": "2021-03-11T02:09:52.999448823Z","Path": "/bin/bash","Args": [],"State": {"Status": "running","Running": true,"Paused": false,"Restarting": false,"OOMKilled": false,"Dead": false,"Pid": 7352,"ExitCode": 0,"Error": "","StartedAt": "2021-03-11T02:09:55.056606873Z","FinishedAt": "0001-01-01T00:00:00Z"},"Image": "sha256:300e315adb2f96afe5f0b2780b87f28ae95231fe3bdd1e16b9ba606307728f55","ResolvConfPath": "/var/lib/docker/containers/1b51c68d06bbf5a43c7a9b524ae7199b2ba15df66eb5038947962be55065084f/resolv.conf","HostnamePath": "/var/lib/docker/containers/1b51c68d06bbf5a43c7a9b524ae7199b2ba15df66eb5038947962be55065084f/hostname","HostsPath": "/var/lib/docker/containers/1b51c68d06bbf5a43c7a9b524ae7199b2ba15df66eb5038947962be55065084f/hosts","LogPath": "/var/lib/docker/containers/1b51c68d06bbf5a43c7a9b524ae7199b2ba15df66eb5038947962be55065084f/1b51c68d06bbf5a43c7a9b524ae7199b2ba15df66eb5038947962be55065084f-json.log","Name": "/intelligent_visvesvaraya","RestartCount": 0,"Driver": "devicemapper","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,"CgroupnsMode": "host","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": {"DeviceId": "29","DeviceName": "docker-253:0-6807780-e119e0df693b087335ead2c23457a2a857d627c4281a25a24d09d468d0b08a44","DeviceSize": "10737418240"},"Name": "devicemapper"},"Mounts": [],"Config": {"Hostname": "1b51c68d06bb","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": "20201204","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": "2cafed0eecee28eaca661731315b18d65cc9bee2494f4ea6fb0ec676a6e2e8fe","HairpinMode": false,"LinkLocalIPv6Address": "","LinkLocalIPv6PrefixLen": 0,"Ports": {},"SandboxKey": "/var/run/docker/netns/2cafed0eecee","SecondaryIPAddresses": null,"SecondaryIPv6Addresses": null,"EndpointID": "f6a077c2e09ea018b0d5957974756564e415f5ea23ee96a5d60ff7e3e1b3f76d","Gateway": "172.17.0.1","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"IPAddress": "172.17.0.3","IPPrefixLen": 16,"IPv6Gateway": "","MacAddress": "02:42:ac:11:00:03","Networks": {"bridge": {"IPAMConfig": null,"Links": null,"Aliases": null,"NetworkID": "29ac9086e0a2908eb23107631795ffac3b3b402aa631aa4e7d157c21ea0e3b84","EndpointID": "f6a077c2e09ea018b0d5957974756564e415f5ea23ee96a5d60ff7e3e1b3f76d","Gateway": "172.17.0.1","IPAddress": "172.17.0.3","IPPrefixLen": 16,"IPv6Gateway": "","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"MacAddress": "02:42:ac:11:00:03","DriverOpts": null}}}}
]

进入当前正在运行的容器

#我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置#命令
docker exec -it 容器id /bin/bash#测试
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
1b51c68d06bb   centos    "/bin/bash"   12 minutes ago   Up 12 minutes             intelligent_visvesvaraya
9b5fc811d7e5   centos    "/bin/bash"   12 minutes ago   Up 12 minutes             strange_dijkstra
[root@localhost ~]# docker exec -it 9b5fc811d7e5 /bin/bash
[root@9b5fc811d7e5 /]# ls
bin  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr
[root@9b5fc811d7e5 /]# ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 02:09 pts/0    00:00:00 /bin/bash
root         16      0  0 02:22 pts/1    00:00:00 /bin/bash
root         32     16  0 02:23 pts/1    00:00:00 ps -ef#方式2
docker attach 容器id
[root@9b5fc811d7e5 /]#docker attach 1b51c68d06bb
正在执行的当前代码...#docker exec        #进入容器后开启一个新的终端,可以在里面操作(常用)
#docker attach         #进入容器正在执行的终端,不会启动新的进程

从容器内拷贝到主机上

docker cp 容器id:容器内路径 目的的主机路径#查看当前主机目录下
[root@localhost ~]# ls
123.java  123.txt  anaconda-ks.cfg  Desktop  workspace  公共  模板  视频  图片  文档  下载  音乐
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
9b5fc811d7e5   centos    "/bin/bash"   26 minutes ago   Up 26 minutes             strange_dijkstra
#进入docker容器内部
[root@localhost ~]# docker exec -it 9b5fc811d7e5  /bin/bash
[root@9b5fc811d7e5 /]# cd /home/
#在容器内新建一个文件
[root@9b5fc811d7e5 home]# touch test.java
[root@9b5fc811d7e5 home]# ls
test.java
[root@9b5fc811d7e5 home]# read escape sequence
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
9b5fc811d7e5   centos    "/bin/bash"   27 minutes ago   Up 27 minutes             strange_dijkstra
#将这个文件拷贝出来到主机上
[root@localhost ~]# docker cp 9b5fc811d7e5:/home/test.java /home
[root@localhost ~]# cd /home/
[root@localhost home]# ls
cai  test.java  user1#拷贝是一个手动的过程,后面可以使用 -v 卷的技术,可以实现主机与容器打通

小结

练习

Docker 安装 Nginx

#1.搜索镜像    search  建议去docker官方文档查看
[root@localhost home]# docker search nginx
#2.下载镜像 pull
[root@localhost home]# docker pull nginx#3.运行测试
[root@localhost home]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    d1165f221234   5 days ago     13.3kB
mysql         latest    c8562eaf9d81   7 weeks ago    546MB
nginx         latest    f6d0b4767a6c   8 weeks ago    133MB
centos        latest    300e315adb2f   3 months ago   209MB
# -d 后台运行
# --name 给容器命名
# -p 宿主机端口:容器内端口
[root@localhost home]# docker run -d --name nginx01 -p 3344:80 nginx
f293c3bb0fe40120c65988da96691662a419d14e18e7560cc4177482df7f9cb5
[root@localhost home]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                  NAMES
f293c3bb0fe4   nginx     "/docker-entrypoint.…"   12 seconds ago   Up 8 seconds    0.0.0.0:3344->80/tcp   nginx01
9b5fc811d7e5   centos    "/bin/bash"              46 minutes ago   Up 46 minutes                          strange_dijkstra
[root@localhost home]# curl localhost:3344#进入容器
[root@localhost home]# docker exec -it f293c3bb0fe4 /bin/bash
root@f293c3bb0fe4:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@f293c3bb0fe4:/# cd /etc/nginx/
root@f293c3bb0fe4:/etc/nginx# ls
conf.d          koi-utf  mime.types  nginx.conf   uwsgi_params
fastcgi_params  koi-win  modules     scgi_params  win-utf

端口暴露的概念

思考问题:我们每次改动nginx配置文件,都需要进入容器内部,十分麻烦,我们要是可以在容器外部提供一个端口映射路径,到达在容器修改文件名,容器内部就可以自动修改? -v 数据卷!

Docker 安装Tomcat

#官方的使用
docker run -it --rm tomcat:9.0#我们之前的启动都是后台,停止容器之后,容器还是可以查看的到的 docker run -it --rm ,一般用来测试,用完即删#正常方法(下载在启动)
docker pull tomcat#启动运行
docker run -d -p 3377:8080 --name tomcat01 tomcat#测试访问没有问题
进入容器
[root@localhost ~]# docker exec -it tomcat01 /bin/bash#发现问题:1、linux命令少了。2、没有webapps  阿里云镜像的原因。默认是最小镜像,所有不必要的都被剔除#保证最小可运行的环境
[root@localhost ~]# docker run -d -p 3377:8080 --name tomcat01 tomcat
[root@localhost ~]# firewall-cmd --permanent --zone=public --add-port=3377/tcp

思考问题:我们以后要部署项目,如果每次都要进入容器是不是非常的麻烦?我们要是在容器外提供一个映射路径,webapps,我们在外部放置项目,就自动同步到内部就好了。

部署es+kibana

#es 暴露的端口很多
#es 十分耗内存
#es 的数据一般需要放置到安全目录!挂载
# --net somenetwork ? 网络配置#启动 elasticsearch
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2#启动 Linux就卡住了
docker stats
#查看docker cpu 的状态#es 是十分号内存的 1.xG #查看 docker stats #测试一下es 是否成功#关闭,增加内存的限制,修改配置文件, -e 环境配置修改
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2

使用:使用kibana连接es

Docker学习笔记01相关推荐

  1. Docker学习笔记总结

    pdf版本笔记的下载地址: Docker学习笔记01(访问密码:3834) Docker学习笔记总结 Docker的安装 Docker的基本组成 Docker的安装 演示系统环境 安装步骤 配置阿里云 ...

  2. docker学习笔记(三)镜像

    参考:汤小洋老师的教学视频 docker学习笔记(一)[docker 介绍.卸载.安装.配置加速] docker学习笔记(二)docker常用命令 docker学习笔记(四)使用docker搭建环境 ...

  3. Docker学习笔记 (4)

    Docker学习笔记 (4) Docker 网络 原理简述 ip addr查看网络地址: 问题:Docker 如何处理容器网络访问的? docker run -d -P --name tomcat01 ...

  4. Docker基础03--Dockerfile详解与镜像发布--(狂神说docker学习笔记)

    文章目录 1. Dockerfile介绍 2. Dockerfile指令说明 3. 制作Centos镜像 3.1 编写Dockerfile的文件 3.2 通过这个文件构建镜像(注意最后加个点!!!) ...

  5. 十分钟了解Docker(我的Docker学习笔记)

    Docker学习笔记 碎碎念 背景知识 Docker是什么 Docker有什么用 Docker原理 Docker实践 Install Docker Engine on Ubuntu 常用命令操作实践 ...

  6. Docker:学习笔记(1)——基础概念

    Docker:学习笔记(1)--基础概念 Docker是什么 软件开发后,我们需要在测试电脑.客户电脑.服务器安装运行,用户计算机的环境各不相同,所以需要进行各自的环境配置,耗时耗力.为了解决这个问题 ...

  7. JavaWeb黑马旅游网-学习笔记01【准备工作】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...

  8. JavaWeb-综合案例(用户信息)-学习笔记01【列表查询】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb-综合案例(用户信息)-学习笔记01[列表查询] JavaWeb-综合案例(用户信息)-学习笔记02[登录功能] JavaWeb-综合案 ...

  9. Servlet和HTTP请求协议-学习笔记01【Servlet_快速入门-生命周期方法、Servlet_3.0注解配置、IDEA与tomcat相关配置】

    Java后端 学习路线 笔记汇总表[黑马程序员] Servlet和HTTP请求协议-学习笔记01[Servlet_快速入门-生命周期方法.Servlet_3.0注解配置.IDEA与tomcat相关配置 ...

最新文章

  1. python希尔排序的优缺点_Python排序搜索基本算法之希尔排序实例分析
  2. dorado 刷新_5.dorado查询开发:使用flushData方法 (T1)
  3. POJ-3352-RoadConstruction(边双联通分量,缩点)
  4. oid 值 内存使用_[技术干货] zabbix监控项原型组合键值
  5. WPS简历模板的图标怎么修改_官方发福利一起来薅羊毛啦!教你免费领WPS会员
  6. vga焊接线顺序_vga线序是怎么排列的?
  7. tikz 折线 箭头_这种箭头用LaTex怎么实现?
  8. 电脑键盘指法的正确练习步骤
  9. UE4地形使用卫星贴图
  10. 【jQWidgets】jqxGrid控件在页面上重新加载的问题
  11. java --运用hhs 框架,tomcat 访问mysql 数据库 连接 失败后,自动 重新连接怎么做?
  12. 优先级翻转与优先级继承
  13. ubuntu20.04安装librtmp库 并在QT5中引入librtmp库
  14. Android中使用dimen定义尺寸
  15. 一道有意思的数学题(11223344)
  16. 人工客服 计算机英语怎么说,人工服务用英文怎么说? 电话上的。。。谢谢
  17. 聚合函数,数学、字符串、函数,时间日期函数
  18. 老男孩视频教程前四期整理
  19. TNEWS今日头条中文新闻(短文本)分类
  20. 如何把CAD中的x轴和y轴互换

热门文章

  1. google map for ios聚合
  2. upload文件上传靶场
  3. 陈广老师C#参考视频 方法的参数传递 总结
  4. 移动端web设计尺寸_移动端页面设计规范尺寸、h5页面设计规范尺寸,h5适配
  5. [转] 通用测试用例大全
  6. 最大扇入数怎么判断_绝地求生:被扔雷怎么办?青铜:被炸,星钻:赶紧跑开,王牌:我是教科书...
  7. 【软件测试】大学毕业后顶着压力,巧合的开启了我人生的新篇章......
  8. winform 鼠标离开子控件触发mouseleave事件处理
  9. 怎么把m4v转换为mp4?分享几种简单的处理方式
  10. call线程起名字_多线程面试题总结