当前位置: 首页 > news >正文

Docker入门

Docker


一、何为Docker


Docker是一个开源的应用容器引擎,基于GO语言并遵循从Apache2.0协议开源。

Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后在发布到任何流行的Linux机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。

Docker支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用这可以之间使用这个镜像。运行中的这个镜像称为容器,容器启动是非常快速的。

二、Docker核心概念


  • docker镜像(Images):Docker镜像适用于创建Docker容器的模板。

  • docker容器(Container):容器时独立运行的一个或一组应用。

  • docker客户端(Client):客户端通过命令行或者其他工具使用Docker。

  • API(https://docs.docker.com/reference/api/docker_remote_api)与Docker的守护进程通信。

  • docker主机(Host):一个物理或者虚拟的机器用于执行Docker守护进程和容器。

  • docker仓库(Registry):Docker仓库用来保存镜像,可以理解为代码控制中心的代码仓库。DockerHub(https://hub.docker.com)提供了庞大的镜像集合供使用。

使用Dockers的步骤:

1)、安装Docker;

2)、去Docker仓库找到这个软件的镜像;

3)、使用Docker运行这个镜像,这个镜像就会生成一个容器;

4)、对容器的启动停止就是对软件的启动停止;

三、安装Docker


  • 查看Contos版本

uname -r

$$

Docker要求Contos系统的内核版本高于3.1.0

$$

  • 升级软件包及内核;(选做)

yum update
  • 安装Docker

yum install docker
  • 启动Docker

systemctl start docker	--启动Docker备注:      此处启动可能会报错,解决方法参考文末常见问题
  • 将Docker设为开机启动项

[root@localhost ~]# systemctl enable docker返回结果为:  Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

四、常用操作


***Docker的仓库 (Docker Hub)

1、镜像操作

操作

命令

说明

检索

docker search 关键字

eg:docker search redis

我们经常去docker hub 上检索镜像的详细信息,如镜像的TAG。

拉取

docker pull 镜像名:tag

:tag 是可选的,tag表示标签,多为软件的版本,默认是latest(最新的)。

列表

docker images

查看所有本机镜像

删除

docker rmi image-id

删除指定的本地镜像

检索信息详情

INDEX

NAME

DESCRIPTION

STARS

OFFICIAL

AUTOMA

索引

镜像的名称,一般只需要看/后面的内容

说明

关注人数k

是否是官方

是否自动配置

2、容器操作

操作

命令

说明

运行

docker run -name container -name -d image-name

eg:docker run name myredis -d redis

-naem:自定义容器名

-d:后台运行

image-name:指定镜像模板

列表

docker ps (查看运行中 的容器)

加上-a;可查看所有容器

启动

docker start container-name/container-id

启动容器

停止

docker stop container-name/container-id

停止当前你所运行的容器

删除

docker rm container-id

删除指定的容器

端口映射

-p 3306:3306

eg:docker run -d -p 3306:3306 --name myreids docker.io/redis

-p:主机端口(映射到)容器内部的端口

容器日志

docker logs container-name/container-id

更多命令

https://docs.docker.com/engine/reference/commandline/docker/

集体操作以官网仓库操作步骤为主

docker ps 或者 docker ps -a 显示的内容:
CONTAINER ID   #容器ID
IMAGE          #镜像名称
COMMAND        #执行的cmd
CREATED        #创建了多久        
STATUS         #容器的status:Up(正在运行) or Exited(不在运行)      
PORTS          #端口映射情况,默认tcp           
NAMES          #容器别名

2、安装Tomcat

1、docker search tomcat;     ----在Docker仓库检索Tomcat
2、docker pull tomcat;      -----从Docekr公共仓库拉取Tomcat(默认版本:latest,最新版)3、docker images;           ----查看本地镜像仓库
4、docker run -d --name MyTomcat_8888 -p 8888:8080 image-name/image-id     ----配置端口映射,启动Tomcat容器(使用浏览器访问:ip+端口号访问,如遇'404',参考文末可能遇到的问题第三条)

3、安装MySQL(不要在正式环境中使用docker安装mysql)

1、docker search mysql;     ----在Docker仓库检索mysql
2、docker pull mysql;      -----从Docekr公共仓库拉取mysql(默认版本:latest,最新版)3、docker images;           ----查看本地镜像仓库
4、docker run -d --name mysql-3308 -e MYSQL_ROOT_PASSWORD=123456 -p 3308:3306 image-name/image-id     ----启动mysql容器(连接数据库,我使用的是IDEA自带的:++正常情况是用不了的++,参考文末可能遇到的问题第三条)

需要使用到的命令:

查看安装的镜像:	docker images
查看启动的容器:	docker ps
查看所有容器:		docker ps -a
查看容器日志:		docker logs 
容器id启动mysql(参考Docker仓库中MySQL参考文档):   docker run --name mysql01 -e MYSQL_ROOT_PASSWORD= 123456 -d     mysql 
启动mysql并进行端口映射(可以外部访问): docker run -p 3306:3306 --name mysql01 -e MYSQL_ROOT_PASSWORD=123456 -d mysql 

可能遇到的问题:


1、启动Docker时报错
1、报错信息:Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.问题原因:因为使用命令: yum install docker下载时, 默认下载的是Docker的最新版本, 但是内核版本低的话可能不兼容新版本Docker, 所以有可能出现如上错误。解决方法:卸载Docker,更新Linux系统内核。具体操作:1、卸载Docker命令:yum remove docker-*2、更新Linux系统内核命令:yum update 3、重启命令:reboot**2、报错信息:Error: Failed to download metadata for repo 'appstream': Cannot prepare internal     mirrorlist: No URLs in mirrorlist问题原因:CentOs Linux 8 从 2021.12.31 号后已经停止维护,所以之后更新镜像需要通过 vault.centos.org来获取更新。所以需要修改软件源mirrors 地址,具体操作如下:修复具体操作:# 进入yum.repos.d 目录下cd /etc/yum.repos.d/# 修改源链接sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*# 要将之前的mirror.centos.org 改成 vault.centos.orgsed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
2、Tomcat做了端口映射之后,访问时报'404'
网页反馈报错信息:HTTP Status 404 – 未找到Type Status Report消息 Not found描述 源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示。Apache Tomcat/9.0.34问题原因:Docker启动的Tomcat容器中的webapps文件夹下的#ROOT#,文件夹缺失导致的。(如果需要多个容器,每个都需要设置)解决方法:找到你本地的Tomcat中的webapps下的ROOT文件夹,再通过Xftp发送的Linux的某个路径下,然后通过命令将ROOT文件拷贝只需要的容器中。具体操作:1、找到你本地的Tomcat中的webapps下的ROOT文件夹;2、再通过Xftp发送的Linux的某个路径下;3、然后通过命令将ROOT文件拷贝只需要的容器中[root@localhost /]# docker cp /usr/local/myTomcat/apache-tomcat-9.0.35/webapps/ROOT 151176e3682e:/usr/local/tomcat/webapps/
3、MySQL启动之后,不能调用,用命令调用也提示找不到MySQL
网页反馈报错信息:[08001] Could not create connection to database server. Attempted 
reconnect 3 times. Giving up.
java.net.ConnectException: Connection refused: connect.问题分析:```shell[root@localhost ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES                  (说明)a55f4a089865        mysql               "docker-entrypoint..."   6 seconds ago       Up 4 seconds        33060/tcp, 0.0.0.0:3308->3306/tcp   mysql-3308          (MySQL是启动成功的,但是还不能使用)8f422d552e8d        mysql               "docker-entrypoint..."   17 hours ago        Up 27 minutes       0.0.0.0:3306->3306/tcp, 33060/tcp   mysql-3306          (MySQL启动成功,并配置成功,可以使用的)151176e3682e        927899a31456        "catalina.sh run"        20 hours ago        Up 14 minutes       0.0.0.0:8888->8080/tcp              MyTomcat_test```需要将root用户添加到设置中解决方法:需要将root用户添加到设置中(如果需要多个容器,只需要设置一次)具体操作:#启动docker run --name mysql-3306 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456! -d mysql#进入容器docker exec -it mysql bash#登录mysqlmysql -u root -pALTER USER 'root'@'localhost' IDENTIFIED BY '123456';#添加(新的)远程登录用户   (这一步可以省略)CREATE USER 'bog'@'%' IDENTIFIED WITH mysql_native_password BY '123456';GRANT ALL PRIVILEGES ON *.* TO 'bog'@'%';#退出(需要退出两次,第一次退出应用,第二次退出容器)exit(或者快捷键:Ctrl+D)# 重新使用数据库客户端工具就可以连接到了。

方法仅供参考,具体解决方法根据情况而定情况


相关链接:

菜鸟教程|Docker教程: https://www.runoob.com/docker/docker-tutorial.htmlDocker 官网:https://www.docker.comDocker仓库 官网:https://hub.docker.comGithub Docker 源码:https://github.com/docker/docker-ce
http://www.lryc.cn/news/28123.html

相关文章:

  • 时间序列分析 | CNN-LSTM卷积长短期记忆神经网络时间序列预测(Matlab完整程序)
  • 【蒸滴C】C语言结构体入门?看这一篇就够了
  • 第十三届蓝桥杯
  • 消息队列mq
  • [学习笔记]黑马程序员Spark全套视频教程,4天spark3.2快速入门到精通,基于Python语言的spark教程
  • git push和 git pull的使用
  • 首发,pm3包,一个用于多组(3组)倾向评分匹配的R包
  • 基于Canal的数据同步
  • vuetify设置页面默认主题色
  • 【Python入门第二十三天】Python 继承
  • C#中,读取一个或多个文件内容的方法
  • 1 基于神经辐射场(neural Radiance Fileds, Nerf)的三维重建- 简介
  • 水果FLStudio21.0.0中文版全能数字音乐工作站DAW
  • 【GlobalMapper精品教程】055:GM坐标转换器的巧妙使用
  • C语言之中rand()函数是如何实现的
  • winform控件PropertyGrid的应用(使运行中的程序能像vistual studio那样设置控件属性)
  • SBUS的协议详解
  • 【PyTorch】教程:torch.nn.Hardshrink
  • JavaScript 函数参数
  • 【C】标准IO库函数
  • http客户端Feign
  • 如何在Java中使用枚举类:从入门到进阶
  • 操作系统(1.2)--引论
  • 【Linux】 shell if的[]和[[]]区别
  • 利用flask解析海康摄像头视频
  • ./docker-compose.yml‘ is invalid
  • Java 流程控制
  • 边界无限入选首届“网络安全高成长性企业”并荣获“勇创之星”
  • SpringBoot项目的快速创建方式(包含第一个程序的运行)
  • linux下设置定期执行需要root权限的sh文件