首页 > 其他分享 >Docker学习

Docker学习

时间:2023-03-24 18:33:06浏览次数:46  
标签:容器 学习 mysql 镜像 Docker null docker

Docker为什么出现?

一款产品: 开发--上线两套环境! 应用环境,应用配置!

开发 --- 运维。问题:我在我的电脑上可以运行!版本更新,导致服务不可用!对于运维来说,考验就十分大?

环境配置是十分的麻烦,每一个机器都要部署环境(集群Redis、ES、Hadoop....)!费时费力。

发布一个项目iar +(Redis MySQL dk ES))项目能不能都带上环境安装打包!

之前在服务器配置一个应用的环境 Redis MysQL dk ES Hadoop,配置超麻烦了,不能够跨平台。

Windows,最后发布到 Linux !

传统:开发iar,运维来做!

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

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

java - iar (环境)-..打包项带上境(镜像)-- ( Docker仓库:商店)--下载我们发布的像-- 直接运行即可!

Docker 给以上的问题,提出了解决方案!

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

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

Docker历史

2010年,几个搞IT的年轻人,就在美国成立了一家公司dotc1oud,做一些 pass 的云计算服务!

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

Docker 刚刚诞生的时候,没有引起行业的注意! dotCloud就活不下去 !最后他们选择了开源。

2013年,Docker开源 !

Docker越来越多的人发现了docker的优点!火了,那时候Docker 每个月都会更新一个版本!

2014年4月9日,Docker1.0发布 !

Docker为什么这么火 ? 因为他相对于虚拟机来说十分的轻巧 !

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

虚拟机: 在window中装一个 Vmware,通过这个软件我们可以虚拟出来一台或者多台电脑!笨重!

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

vm:		linux centOS原生镜像(一个电脑!)  隔离,需要开启多台虚拟机!	几个G 几分钟
Docker:	隔离, 镜像(最核心的环境 4m + jdk + mysql)十分的小巧,运行镜像就可以了!  小巧! 几个M 甚至KB  秒级启动

到现在,几乎所有的开发人员都要学会Docker!

聊聊Docker

Dcoker是基于 GO 语言开发的!开源项目!

官网文档地址:https://docs.docker.com/

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

Docker能干嘛

虚拟机技术

虚拟机技术缺点

  1. 资源占用十分多
  2. 冗余步骤多
  3. 启动很慢!

容器化技术

容器化技术不是模拟的一个完整操作系统

image-20230323203842388

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

  • 传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件
  • 容器内的应用直接运行在 宿主机的内容,容器是没有自己的内核的,也没有虚拟我们的硬件,所以就轻便了
  • 每个容器间是互相隔离,每个容器内都有一个属于自己的文件系统,互不影响。

DevOps(开发、运维)

应用更快速的交付和部署

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

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

更便捷的升级和扩缩容

使用了Docker之后,我们部署应用就和搭积木一样!项目打包为一个镜像,扩展 服务器A ! 服务器B直接运行镜像

更简单的系统运维

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

**更高效的计算资源利用 **

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

Docker安装

docker的基本组成

image-20230324173228035

镜像(image ) :

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

容器( container) :
Docker利用容器技术,独立运行一个或者一个组应用,通过镜像来创建的。
启动,停止,删除,基本命令!
目前就可以把这个容器理解为就是一个简易的linux系统

仓库(repository) :
仓库就是存放镜像的地方 !
仓库分为公有仓库和私有仓库 !
Docker Hub( 默认是国外的)
阿里云....都有容器服务器( 配置镜像加速 !)

安装docker

# 1、卸载旧版本的docker
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软件包索引
yum makecache fast
    
# 4、安装Docker, docker-ce 社区版  ee 企业版
yum install docker-ce docker-ce-cli containerd.io

# 5、启动docker
systemctl start docker

# 6、判断是否安装成功
docker version

# 7、运行docker
docker run hello-world

# 8、查看一下下载的这个hello-word 镜像
dcoker images

卸载docker

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

# 删除资源
rm -rf /var/lib/docker

# /var/lib/docker   docker的默认工作路径!

Docker run运行原理

底层原理

docker是怎么工作的?

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

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

image-20230324173958421

Docker为什么比VM快?

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

2、Docker利用的是虚拟主机的内核,vm需要是Guest OS。

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

Docker的常用命令

帮助命令

docker version           # 显示docker信息
docker info              # 显示docker系统的信息, 宝库啊镜像和容器的数量
docker 命令 --help    	# 万能命令

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

镜像命令

docker imgaes 查看所有本机商的镜像

# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    feb5d9fea6a5   13 months ago   13.3kB

# 解释
REPOSITORY 镜像的仓库源
TAG		   镜像的标签
IMAGE ID   镜像的id
CREATED	   镜像的创建时间
SIZE       镜像的代销

# 可选项
-a, --all		# 列出所有镜像
-q, --quiet     # 只显示镜像的id

docker search镜像搜索

# docker search mysql
NAME                            DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                           MySQL is a widely used, open-source relation…   13470     [OK]       
mariadb                         MariaDB Server is a high performing open sou…   5141      [OK]       
phpmyadmin                      phpMyAdmin - A web interface for MySQL and M…   689       [OK]       
percona                         Percona Server is a fork of the MySQL relati…   593       [OK]       
bitnami/mysql                   Bitnami MySQL Docker Image                      79                   [OK]
databack/mysql-backup           Back up mysql databases to... anywhere!         74                   
linuxserver/mysql-workbench                                                     45                   
ubuntu/mysql                    MySQL open source fast, stable, multi-thread…   38                   
linuxserver/mysql               A Mysql container, brought to you by LinuxSe…   38                   
circleci/mysql                  MySQL is a widely used, open-source relation…   28                   
google/mysql                    MySQL server for Google Compute Engine          22                   [OK]
rapidfort/mysql                 RapidFort optimized, hardened image for MySQL   13                   
bitnami/mysqld-exporter                                                         4                    
ibmcom/mysql-s390x              Docker image for mysql-s390x                    2                    
newrelic/mysql-plugin           New Relic Plugin for monitoring MySQL databa…   1                    [OK]
vitess/mysqlctld                vitess/mysqlctld                                1                    [OK]
hashicorp/mysql-portworx-demo                                                   0                    
docksal/mysql                   MySQL service images for Docksal - https://d…   0                    
mirantis/mysql                                                                  0                    
rapidfort/mysql8-ib             RapidFort optimized, hardened image for MySQ…   0                    
cimg/mysql                                                                      0                    
rapidfort/mysql-official        RapidFort optimized, hardened image for MySQ…   0                    
drud/mysql                                                                      0                    
silintl/mysql-backup-restore    Simple docker image to perform mysql backups…   0                    [OK]
corpusops/mysql                 https://github.com/corpusops/docker-images/     0 


# 可选项,通过搜索赖过滤
--filter=STARS=3000    # 搜索出来的镜像就是STARS大于3000的 

docker pull 下载镜像

 # 下载镜像 docker pull 镜像名[:tag]
# docker pull mysql                             Using default tag: latest  # 如果不写 tag. 默认就是 latest
latest: Pulling from library/mysql
0bb5c0c24818: Pull complete  	# 分层下载,docker image的核心 联合文件系统
cbb3106fbb5a: Pull complete 
550536ae1d5e: Pull complete 
33f98928796e: Pull complete 
a341087cff11: Pull complete 
0e26ac5b33f6: Pull complete 
c883b83a7112: Pull complete 
873af5c876c6: Pull complete 
8fe8ebd061d5: Pull complete 
7ac2553cf6b4: Pull complete 
ad655e218e12: Pull complete 
Digest: sha256:96439dd0d8d085cd90c8001be2c9dde07b8a68b472bd20efcbe3df78cff66492 # 签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest  # 真实地址

# 等价于它
docker pull mysql
docker pull docker.io/library/mysql:latest

docker rmi 删除镜像!

# docker 执行删除镜像,根据id 或者名称
docker rmi -f (id)

# docker 执行批量删除镜像 通过递归方式进行删除
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   
# ls  		# 查看容器内部的centos OS系统,很多命令都是不完善的
bin  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr

# 使用exit退出容器命令
[root@6cb0fea026f8 /]# exit
exit

列出所有的运行的容器

# docker ps 命令
	# 列出当前正在运行的容易
-a	# 列出当前正在运行的容易+带出历史运行过的容器
-n=? # 显示最近创建的容器
-q  #  只显示容器的编号

# docker ps -a
CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS                      PORTS     NAMES
6cb0fea026f8   centos         "/bin/bash"   2 minutes ago   Exited (0) 59 seconds ago             upbeat_moser
822ef5ad50e8   feb5d9fea6a5   "/hello"      2 hours ago     Exited (0) 2 hours ago                festive_shaw

退出容器

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

删除容器

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

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

启动和停止容器的操作

docker start 容器id      # 启动容器
docker restart 容器id    # 重启容器
docker stop 容器id       # 停止容器
docker kill 容器id	   # 强制杀死容器

常用其他命令

后台启动容器

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

查看日志的命令

docker logs -f -t --tail 

查看容器中进程信息

# docker top 容器id 是查看docker内部的信息
# docker top 192272e78097     
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                28239               28220               0                   21:35               ?                   00:00:00            /bin/sh -c while true;do echo kuangshen; sleep 1; done
root                30736               28239               0                   21:38               ?                   00:00:00            /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1

镜像的元数据

# 命令  docker inspect 容器id

# 测试
# docker inspect 192272e78097     
[
    {
        "Id": "192272e780977cb4f2b93b6bac4fc66205ada989f812a995a3ad544b491e738d",
        "Created": "2022-11-16T13:35:33.45854294Z",
        "Path": "/bin/sh",
        "Args": [
            "-c",
            "while true;do echo kuangshen; sleep 1; done"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 28239,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2022-11-16T13:35:33.728492461Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6",
        "ResolvConfPath": "/var/lib/docker/containers/192272e780977cb4f2b93b6bac4fc66205ada989f812a995a3ad544b491e738d/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/192272e780977cb4f2b93b6bac4fc66205ada989f812a995a3ad544b491e738d/hostname",
        "HostsPath": "/var/lib/docker/containers/192272e780977cb4f2b93b6bac4fc66205ada989f812a995a3ad544b491e738d/hosts",
        "LogPath": "/var/lib/docker/containers/192272e780977cb4f2b93b6bac4fc66205ada989f812a995a3ad544b491e738d/192272e780977cb4f2b93b6bac4fc66205ada989f812a995a3ad544b491e738d-json.log",
        "Name": "/determined_torvalds",
        "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,
            "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": {
                "LowerDir": "/var/lib/docker/overlay2/67c255c0965898c601d5e6b5f3e9dda6b478fe9c58c62ae3aff7597ddd32eadd-init/diff:/var/lib/docker/overlay2/0f2a7d30069aac3b5b21283c41e9a8aa2f0cbb924e01122c816f9f6b8df996e1/diff",
                "MergedDir": "/var/lib/docker/overlay2/67c255c0965898c601d5e6b5f3e9dda6b478fe9c58c62ae3aff7597ddd32eadd/merged",
                "UpperDir": "/var/lib/docker/overlay2/67c255c0965898c601d5e6b5f3e9dda6b478fe9c58c62ae3aff7597ddd32eadd/diff",
                "WorkDir": "/var/lib/docker/overlay2/67c255c0965898c601d5e6b5f3e9dda6b478fe9c58c62ae3aff7597ddd32eadd/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [],
        "Config": {
            "Hostname": "192272e78097",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "while true;do echo kuangshen; sleep 1; done"
            ],
            "Image": "centos",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.label-schema.build-date": "20210915",
                "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": "cf0749e698d7f24e7901d0e4ed72ab4ac71ae6d479fa76b36493a71e7041dfb8",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {},
            "SandboxKey": "/var/run/docker/netns/cf0749e698d7",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "241c546d5a739e7d2de8ca87b3e630c4295386eb1043baf6cbe632ff94c49388",
            "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": "9fd65d89546eea5447046a71244a4f9e3b9a51b8c23e24730b339fb1aa58707f",
                    "EndpointID": "241c546d5a739e7d2de8ca87b3e630c4295386eb1043baf6cbe632ff94c49388",
                    "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 bashShell

# docker exec -it 192272e78097 /bin/bash
[root@192272e78097 /]# ls
bin  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr
[root@192272e78097 /]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 13:35 ?        00:00:00 /bin/sh -c while true;do echo kuangshen; sleep 1; done
root       558     0  0 13:44 pts/0    00:00:00 /bin/bash
root       583     1  0 13:44 ?        00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bi
root       584   558  0 13:44 pts/0    00:00:00 ps -ef

# 方式二
docker attach 容器id

# 测试
# docker attach 6cb0fea026f8   
正在执行的代码.....

# docker exec     # 进入容器后开启一个新的终端,可以在里面操作(常用)
# docker attach   # 进入容器正在执行的终端,不会启动新的进程!

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

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


# 查看档期啊你主机目录下的docker历史记录
 # docker ps -a
CONTAINER ID   IMAGE          COMMAND       CREATED             STATUS                        PORTS     NAMES
22b637874dbd   centos         "/bin/bash"   35 minutes ago      Exited (127) 34 minutes ago             hopeful_mcclintock
e354f095180b   centos         "/bin/bash"   44 minutes ago      Exited (0) 44 minutes ago               keen_pike
6cb0fea026f8   centos         "/bin/bash"   About an hour ago   Exited (0) 32 seconds ago               upbeat_moser
822ef5ad50e8   feb5d9fea6a5   "/hello"      3 hours ago         Exited (0) 3 hours ago                  festive_shaw

# 启动一个docker镜像
 # docker start 22b637874dbd           
22b637874dbd
 # docker ps                
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS         PORTS     NAMES
22b637874dbd   centos    "/bin/bash"   36 minutes ago   Up 4 seconds             hopeful_mcclintock


# 进入到容器内部
 # docker attach 22b637874dbd            
[root@22b637874dbd /]# cd /home
[root@22b637874dbd home]# ls

# 在容器内部创建一个 test.java文件
[root@22b637874dbd home]# touch test.java
[root@22b637874dbd home]# ls
test.java

# 退出容器
[root@22b637874dbd home]# exit
exit
 # docker ps                 
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
 # docker ps -a
CONTAINER ID   IMAGE          COMMAND       CREATED             STATUS                      PORTS     NAMES
22b637874dbd   centos         "/bin/bash"   37 minutes ago      Exited (0) 28 seconds ago             hopeful_mcclintock
e354f095180b   centos         "/bin/bash"   46 minutes ago      Exited (0) 46 minutes ago             keen_pike
6cb0fea026f8   centos         "/bin/bash"   About an hour ago   Exited (0) 2 minutes ago              upbeat_moser
822ef5ad50e8   feb5d9fea6a5   "/hello"      3 hours ago         Exited (0) 3 hours ago                festive_shaw

# 将容器内部的文件进行拷贝到当前文件夹下面
 # docker cp 22b637874dbd:/home/test.java /home
 # ls
lbx.java  lighthouse  mysql  test.java


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

小练习

Docker下安装Nginx

# 1、搜索镜像 search 去docker官网下载
 # docker search nginx

# 2、下载nginx
 # docker pull nginx 
 
# 3、启动nginx
# docker run -d --name nginx01 -p 3344:80 nginx
# -d 后台运行
#--name  给容器命名
# -p 宿主机端口
 # docker run -d --name nginx01 -p 3344:80 nginx
b71109fdd4ce9f634d374f2e4ec3759b2933005d2ba5e96ac2b5d95198f1d54d
 # docker ps                                    
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                                   NAMES
b71109fdd4ce   nginx     "/docker-entrypoint.…"   5 seconds ago   Up 5 seconds   0.0.0.0:3344->80/tcp, :::3344->80/tcp   nginx01
 # curl localhost:3344
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>



# 4、进入容器
# docker exec -it b71109fdd4ce /bin/bash           
root@b71109fdd4ce:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@b71109fdd4ce:/# cd /etc/nginx
root@b71109fdd4ce:/etc/nginx# ls
conf.d  fastcgi_params  mime.types  modules  nginx.conf  scgi_params  uwsgi_params
root@b71109fdd4ce:/etc/nginx# 

端口暴露的原理

image-20230324181059575

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

Docker安装Tomcat

# 官方镜像
docker run -it --rm tomcat:9.0

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


# 下载再启动
docker pull tomcat:9.0

# 启动运行
docker run -d -p 3355:8080 --name tomcat01 tomcat

# 测试外网可以访问了

# 进入容器
docker run -d -p 3355:8080 --name tomcat01 tomcat

# 发现问题:1、Linux命令少了, 2、没有webapps。 阿里云镜像的原因。默认是最小的镜像,所有不必要的都剔除掉。
# 保证最小可运行的环境

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

Docker部署 es + kibana

# es 暴露的端口很多
# es 十分的耗内存
# es数据一般需要挂载到安全目录
# --net somenetwork ? 网络配置


# 启动 elasticsearch
 docker run -d --name elasticsearc -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2 

# 发现问题: 启动了就会发现服务器就卡住了   

# docker stats 查看cpu状态

# 测试es是否能够成功
 curl localhost:9200
  
{
  "name" : "01cd3b077bf4",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "z6GHnaQCT4m_o9Mfrp1_dQ",
  "version" : {
    "number" : "7.6.2",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
    "build_date" : "2020-03-26T06:34:37.794943Z",
    "build_snapshot" : false,
    "lucene_version" : "8.4.0",![](/i/l/?n=23&i=blog/2471626/202303/2471626-20230324182353034-1640790585.png)
![](/i/l/?n=23&i=blog/2471626/202303/2471626-20230324182421685-1158745162.png)

    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}


# 增加内存限制,修改配置文件 -e 环境配置修改
 docker run -d --name elasticsearc02 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64 -Xmx512" elasticsearch:7.6.2 

标签:容器,学习,mysql,镜像,Docker,null,docker
From: https://www.cnblogs.com/gc5132/p/17253021.html

相关文章

  • WebService入门教程_HTTP协议学习
    实现HTTP简介WEB浏览器与WEB服务器之间的一问一答的交互过程必须遵循一定的规则,这个规则就是HTTP协议。HTTP是hypertexttransferprotocol(超文本传输协议)的简写,它是TCP/......
  • 在docker上安装MySQL和Redis
    1.通过docker命令下载mysql5.7镜像mysql5.7前期准备2.通过docker命令下载mysql8.0镜像mysql8.0前期准备3.通过docker命令下载redis镜像redis前期准备本文永......
  • 在CentOS上安装Docker引擎
    1,先决条件####1-1操作系统要求1-2卸载旧版本2,安装方法2-1使用存储库安装设置存储库安装Docker引擎本文永久更新地址:官方地址:https://docs.docker.c......
  • 从Python的turtle绘图开始学习图形化程序设计
    Turtlepython2.6版本中后引入的一个简单的绘图工具,叫做海龟绘图(TurtleGraphics),turtle库是python的内部库,使用导入即可:importturtle画布画布就是turtle为我们展开用......
  • kafka学习
    https://github.com/Snailclimb/springboot-kafka/blob/master/docs/3-10%E5%88%86%E9%92%9F%E5%AD%A6%E4%BC%9A%E5%A6%82%E4%BD%95%E5%9C%A8SpringBoot%E7%A8%8B%E5%BA%8F......
  • 零基础转行软件测试首先需要学习哪些内容?
    随着现在互联网行业的迅猛发展,越来越多的人想涌入进来,因为大家都觉得IT行业工资高,做测试门槛又低,是的,入门门槛确实比较低,但是要做好的话,还是有点难的,毕竟术业有专攻嘛,......
  • m1 docker mysql8/arm64v8 解决 `only_full_group_by` 问题
    m1dockermysql8/arm64v8解决only_full_group_by问题问题原因MySql从5.7版本开始默认开启only_full_group_by规则,规则核心原则如下,没有遵循原则的sql会被认为是不合......
  • React Native学习笔记(二)————(RN)初始化项目
    一、创建ReactNative项目1.1、ReactNative有一个内置的命令行界面,你可以用它来生成一个新项目。您可以使用Node.js附带的访问它,而无需全局安装任何内容。让我们创建......
  • 利用tensorflow实现简单的卷积神经网络——迁移学习小记(二)
    一、什么是神经网络(CNN)  卷积神经网络(ConvolutionalNeuralNetwork,简称CNN),是一种前馈神经网络,人工神经元可以影响周围单元,可以进行大型图像处理。卷积神经网络包括卷积......
  • 【go】snowflake和snoyflake雪花算法学习与go实现
    预备知识:MonotonicClocks,即单调时间,所谓单调,就是只会不停的往前增长,不受校时操作的影响,这个时间是自进程启动以来的秒数参考文章:https://www.simpleapples.com/2018/10/......