docker部署基础学习
一。安装docker1.docker软件包在extras中默认存在,可以直接使用yum进行安装yum repolistyum -y install docker启动docker服务,确认docker版本启动docker报错,安装成了podman-docker查看podman镜像可以:podman images查看docker镜像可以:docker images...
一。安装docker
To install Docker Engine, you need a maintained version of CentOS 7 or 8.要安装Docker Engine,您需要CentOS 7或8的维护版本。.
1.安装centos7虚拟机
2.docker软件包在extras中默认存在,可以直接使用yum进行安装
yum repolist
yum -y install docker
3启动docker服务,确认docker版本
启动docker报错,
安装成了podman-docker(注意区分podman和docker)
centos7版本下载的是docker。centos9在线下载的是podman.
4。验证安装是否成功
二。基础命令(忘记命令可以使用)
docker
三。镜像操作
查看podman镜像可以:podman images
查看docker镜像可以:docker images
查看历史镜像 :docker history 镜像名
查看拉取到本地的镜像:docker image list
搜索镜像名:docker search 镜像名
拉取镜像:docker pull 镜像名
轻量级高并发服务器Nginx,与Apache相似,是一种web服务器。
先搜索镜像
再拉取镜像到虚拟机本地
查看已拉取到本地的镜像:docker image list
在前台运行容器命令如下,输入后容器就会运行,按ctrl+c可以终止容器的运行.
docker run docker.io/nginx
在后台运行容器:
docker run -d docker.io/nginx
查看在运行的容器:docker ps
四。 docker部署第一个java web应用
制作自己的镜像
安装Tomcat
1、查找Docker Hub上的tomcat镜像docker search tomcat
因为tomat镜像肯定有jdk,所以我们就不用单独再装jdk了
2.拉取官方的镜像docker pull tomcat
运行tomcat镜像
注:前者是外围访问端口:后者是容器内部端口
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
运行tomcat镜像:docker run -d -p 8080:8080 tomcat
(nginx默认端口为80)
3
运行nginx镜像:docker run -d -p 80:80 nginx
4
使用docker run -d -p 8080:8080 tomcat运行命令打开页面报404
注:可以ping通,可以telnet通
原来是docker的tomcat是经过切割的,里面的webapps是空的。
所以就没能找到tomcat的页面(显示404),但其实tomcat已经是成功启动的。我们只需要进入tomcat容器开启一个交互模式的终端(0cb9c6b72e02 为docker ps 命令查出的containersID)
我们发现webapps.dist中有正常的webapps文件夹中该有的东西
有root根目录等。需要把webapps.dist文件中的复制到webapp中就可以了
cp -r webapps.dist/* webapps
成功访问
5
创建文档复制执行程序包war包(可随意放)
6
下载mysql镜像
docker pull mysql:5.7.16
运行mysql:docker run -d -p 3307:3306 -e mysql_root…
将sql文件导入mysql容器中:docker cp t1.sql 容器id:/usr/local
进入mysql容器docker exec
登录mysql :mysql -uroot -p
创建database
t1.sql文件导入t1数据库
容器内登录mysql确认是否完成导入:show tables
7
安装redis:docker pull redis:4.0.1
启动redis: docker run -d -p 6379:6379
8
安装rabbitmq: docker pull rabbitmq.3.6.11
启动rabbitmq: docker run -d rabbitmq
9
复制war至tomcat容器(复制完成后名称修改为ROOT.war):docker cp
10
访问报错
修改war包的application.yml配置文件,检查数据库密码
修改后,重新上传war包至tomcat容器,依旧报错,查看docker日志也没有报错信息
查看tomcat启动日志有报错:docker logs --tail 100
11
尝试查看用户权限
guest权限正常:rabbitmqctl list_user
发现端口映射有问题,启动的时候没有映射
docker run -d -p 5672:5672 rabbitmq
重新启动依旧无法访问,日志报错(这是rabbitmq的运行日志)
guest用户默认连接本机ip,就会报这个错,不耽误使用RabbitMQ。解决:可以新建一个用户
重新创建rabbitmq用户,在rabbit容器中
创建用户rabbitmqctl add_user admin admin (用户和密码)
设置管理员rabbitmqctl set_user_tags admin administrator
至此 可登录管理平台(不能通过 java后台访问 )
设置权限(没有设置成功) rabbitmqctl set_permissions -p/admin “.”".“”.*"
至此可通过 java后台访问
更新application.yml的登录用户后,依旧无法访问
本地拼rabbitmq的网址拒绝连接:curl http://192.168.126.5:8080
12
重新创建容器(需要新建admin用户):docker run -d -p 15672:15672 -p 5672:5672 rabbitmq
在rabbitmq容器中执行:rabbitmq-plugins enable rabbitmq_management
或者如下图
打开rabbitmq管理页面
登录后没有admin用户
进入rabbitmq容器创建用户
五。Dockerfile(Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。)
1.创建一个空目录
2.创建一个文本文件
其dockerfile 内容为:
保存后,在dockerfile所在目录执行
注: -t 是为新镜像设置仓库和名称,其中 angelkitty 为仓库名, nginx_web 为镜像名, :v1为标签(不添加为默认 latest )最后边有一个句号 ‘.’
报错提示dockerfile 为空,检查后发现Dockerfile没有保存成功,重新编写后保存成功,执行成功。
查看创建的镜像
运行创建的镜像
访问页面
参考:https://blog.csdn.net/deng624796905/article/details/86493330
四。容器操作
docker create命令能够基于镜像创建容器。
该命令执行的效果类似于docker run -d,即创建一个将在系统后台运行的容器。
但是与docker run -d不同的是,docker create创建的容器并未实际启动,还需要执行docker start命令或docker run命令以启动容器。
事实上,docker create命令常用于在启动容器之前进行必要的设置
1)创建容器:docker create [OPTIONS] IMAGE [COMMAND] [ARG…]例:docker create -it --name “first1-docker” docker.io/helloworld /bin/bash
/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash
docker run 创建并启动一个容器,在run后面加上-d参数,则会创建一个守护式容器在后台运行。
docker ps -a 查看已经创建的容器
docker ps -s 查看已经启动的容器
docker start con_name 启动容器名为con_name的容器
docker stop con_name 停止容器名为con_name的容器
docker rm con_name 删除容器名为con_name的容器
docker rmi 删除镜像
docker rename old_name new_name 重命名一个容器
docker attach con_name 将终端附着到正在运行的容器名为con_name的容器的终端上面去,前提是创建该容器时指定了相应的sh
执行这个命令后,按下回车键,会进入容器的命令行Shell中。
docker logs con_name 获取容器名为con_name的容器日志
docker inspect 查看容器的详细信息
docker top con_name 查看容器名为con_name的容器内部的进程
docker exec 可以用来在容器中运行一个进程
创建容器:例
查看创建的容器
注:停止docker服务systemctl stop docker
五。报错
1.docker run hello-world 报错,没启动服务
2.本地访问启动容器
与 Docker 相关的本地资源都存放在/var/lib/docker/目录下,其中 container 目录存放容器信息,graph 目录存放镜像信息,aufs 目录下存放具体的内容文件。
6
退出一个镜像的 bash,而不终止它
Ctrl + P + Q
7
如何清理后台停止的容器?
sudo docker rm $sudo( docker ps -a -q)
8
查看docker 容器内的文件
docker exec 容器id ls -a /
或者看root目录下的文件
docker exec 容器id ls -a /root
9
docker容器内创建临时文件
10
容器与主机之间的数据拷贝命令
主机到容器:
docker cp /www 96f7f14e99ab:/www/
容器到主机:
docker cp 96f7f14e99ab:/www /tmp/
11
本地访问docker运行的nginx
修改docker容器ip,找到/etc/docker目录,编辑daemon.json 添加如下内容。
查看ip:
上图的配置地址本地无法访问docker启动的nginx和tomcat。因为和虚拟机同一网段所以无法访问,docker网络配置可以不配置
12
docker pull tomcat
tomcat运行无法查看docker ps 什么都没有只有nginx
先把原先的镜像删除:docker rmi 镜像id,会提示先删除容器
可以强制删除镜像:docker rmi -f 镜像id
如果image_id相同,tag不同,删除方式:docker rmi repository:tag
docker 下载镜像地址:https://hub.docker.com/_/tomcat/tags
docker pull tomcat:8.5.83-jre8-temurin-focal
修改镜像名称和tag:docker tag image_id repository:tag
已经可以运行。
13
批量删除停止运行的容器
docker rm ` docker ps -a -q |grep -i exited |awk ‘{print $1}’
14
什么是docker hub
docker Hub是一个由Docker公司运行和管理的基于云的存储库。它是一个在线存储库,DOcker进行可以由其他用户发布和使用
15
docker安全吗
通过签名机制来对镜像进行验证,Docker利用了Linux内核中很多安全特性来保证不同容器之间的隔离,具有极高的安全性
16
Docker容器退出时是否丢失数据
容器中数据会一直保留(即使容器停止),直到删除该容器。
17
使用docker的优点
更快的交付和部署。更高效的资源利用,更简单的更新管理。使用Dockerfile,通过简单的修改就可以代替大量的更新操作
18
docker部署nginx
创建外部conf及html目录
mkdir -p /usr/local/docker/nginx/{html,conf}
/{html,conf}指同时创建html和conf
放一个nginx.conf文件到conf文件夹,把前端打好的包放入html
挂载本地文件目录到容器html的命令
docker run -d -P 80:80 -v /usr/local/nginx12208:/usr/share/nginx/html nginx
就可以在容器内部看到本机的/usr/local/nginx12208目录文件
正常情况下是没有的
19.
查看docker占用cpu 内存:下图或者docker stats 容器id
容器用完后记得删除,通过docker kill 命令删除
20
attach作用:进入容器正在执行的终端
docker exec 和docker attach 的区别
docker exec
#进入当前容器后开启一个新的终端,可以在里面操作。(常用)
docker attach
#进入容器正在执行某个命令的终端,不能在里面操作;多个窗口同时attach到同一个容器时,所有窗口同步显示;当某个窗口因命令阻塞,其他窗口也无法操作
docker attach 进入容器,再退出会导致容器停止;docker exec 进入容器,再退出不会导致容器停止
21
Docker提供docker stats和docker事件等工具来监控生产中的Docker
一些常见的Docker事件是:attach,commit,die,detach,rename,destroy等。我们还可以使用各种选项来限制或过滤我们感兴趣的事件
22
docker如何运行在非linux环境
Windows 平台上使用的是 Hyper-V 产品技术,Mac 平台上使用的是 Hypervisor.framework (框架)产品技术。
23
docker查看镜像中得环境变量:docker run nginx env
24
在docker容器中使用Ctrl+D即可退出容器,但是这样会让容器停止运行(我自己测试了一下不会停止运行)
如何退出一个镜像的 bash,而不终止它?
答:按 Ctrl+p,后按 Ctrl+q,如果按 Ctrl+c 会使容器内的应用进程终止,进而会使容器终止。
25
docker inspect : 获取容器/镜像的元数据。
26
退出容器时候自动删除,使用rm:dockers run —rm -p 80:80 nginx
在执行docker run的时候如果添加—rm参数,则容器终止后会立刻删除。
27
docker start 启动状态为exited的容器
28
停止正在运行的所有容器;docker kill $(docker ps -q)
29
查看容器运行日志:docker logs -f -t --tail 5 容器id
-t 显示详细的时间
-f ,–follow 跟踪实时日志
–since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
–tail string 从日志末尾显示多少行日志, 默认是all -t,
–timestamps 显示时间戳
–until string 显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)
30
Docker 的配置文件:/etc/sysconfig 有docker 和docker-network等
可以使用 Linux 软连接的方式来做docker的默认位置
31
将一台宿主机的 docker 环境迁移到另外一台宿主机
停止 Docker 服务,将整个 docker 存储文件复制到另外一台宿主机上,然后调整另外一台宿主机的配置即
32
Docker 容器创建后,删除了/var/run/netns 目录下的网络名字空间文件,可以手动恢复吗?
答:查看容器进程 ID,比如 1234
sudo docker inspect --format=‘{{. State.pid}}’ $container_id 1234
到 proc 目录下,把对应的网络名字空间文件链接到 /var/run/netns,然后通过正常的系统命令查看操作容器的名字空间。
33
Docker的工作原理:每个容器都在自己的命名空间中运行,但使用与所有其他容器完全相同的内核。
34
如何使用Docker构建与环境无关的系统?
35
docker hub
提供链接至代码库的功能,可以构建镜像并测试他们,它可以在项目全流程中的容器镜像所使用。
36
Docker镜像是由一系列只读层构建的层:每个层代表镜像Dockerfile中的一条指令。
下面的Dockerfile包含命令,每个命令都创建一个层。
FROM nginx
COPY . /app
37
如何在多个环境中使用Docker?
38
解压缩zip
先查询是否有yum list | grep unzip
yum install zip
yum install unzip
unzip 压缩文件.zip
39
更多推荐
所有评论(0)