Linux 环境下Docker的安装与简单使用

    技术2022-07-11  144

    1、简介

    Docker是一个开源的应用容器引擎;是一个轻量级容器技术;

    Docker支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像;

    运行中的这个镜像称为容器,容器启动是非常快速的。

    2、核心概念

    docker主机(Host):安装了Docker程序的机器(Docker直接安装在操作系统之上);

    docker客户端(Client):连接docker主机进行操作;

    docker仓库(Registry):用来保存各种打包好的软件镜像;

    docker镜像(Images):软件打包好的镜像;放在docker仓库中;

    docker容器(Container):镜像启动后的实例称为一个容器;容器是独立运行的一个或一组应用

    使用Docker的步骤:

    1)、安装Docker

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

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

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

    3、Docker的安装

    查看内核版本 <Docker 要求 CentOS 系统的内核版本高于 3.10> uname -r 本机<内核版本: 3.10.0-327.el7.x86_64>

    把yum包更新到最新 sudo yum update

    安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的 sudo yum install -y yum-utils device-mapper-persistent-data lvm2

    设置yum源 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

    查看仓库中docker版本 yum list docker-ce --showduplicates | sort -r

    安装docker sudo yum install docker-ce

    启动Docker, 设置开机启动, 停止Docker sudo systemctl start docker sudo systemctl enable docker sudo systemctl stop docker

    查看版本 docker version

    查看日志状态成功日志 systemctl status docker.service

    卸载Docker

    查询安装过的包 yum list installed | grep docker 删除安装的软件包 yum -y remove docker.x86_64 yum -y remove docker-client.x86_64 yum -y remove docker-common.x86_64

    Docker常用命令&操作

    1)、镜像操作

    操作命令说明检索docker search 关键字 eg:docker search redis我们经常去docker hub上检索镜像的详细信息,如镜像的TAG。拉取docker pull 镜像名:tag:tag是可选的,tag表示标签,多为软件的版本,默认是latest列表docker images查看所有本地镜像删除docker rmi image-id删除指定的本地镜像

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

    2)、容器操作

    软件镜像(QQ安装程序)----运行镜像----产生一个容器(正在运行的软件,运行的QQ);

    Docker安装Tomcat:

    1、搜索镜像 [root@localhost ~]# docker search tomcat 2、拉取镜像 [root@localhost ~]# docker pull tomcat 3、根据镜像启动容器 docker run --name mytomcat -d tomcat:latest 4、docker ps 查看运行中的容器 5、 停止运行中的容器 docker stop 容器的id 6、查看所有的容器 docker ps -a 7、启动容器 docker start 容器id 8、删除一个容器 docker rm 容器id 9、启动一个做了端口映射的tomcat [root@localhost ~]# docker run -d -p 8888:8080 tomcat -d:后台运行 -p: 将主机的端口映射到容器的一个端口 主机端口:容器内部的端口 10、为了演示简单关闭了linux的防火墙 service firewalld status ;查看防火墙状态 service firewalld stop:关闭防火墙 11、查看容器的日志 docker logs container-name/container-id 更多命令参看 https://docs.docker.com/engine/reference/commandline/docker/ 可以参考每一个镜像的文档

    遇到的问题

    一、拉取镜像时报错

    Docker镜像报错:Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request cance

    解决方案:

    打开 vim /etc/docker/daemon.conf(若没有自行创建)写入: { "registry-mirrors": ["https://registry.docker-cn.com",“http://hub-mirror.c.163.com"] }

    Docker 官方中国区 https://registry.docker-cn.com 网易 http://hub-mirror.c.163.com 中国科技大学 https://docker.mirrors.ustc.edu.cn 阿里云 https://pee6w651.mirror.aliyuncs.com

    重启一下docker: systemctl daemon-reload systemctl restart docker
    二、Docker中启动Tomcat外部访问报HTTP Status 404 – 未找到

    产生原因:

    在docker启动tomcat(版本是从阿里云上拉下的)时,访问tomcat首页时出现HTTP Status 404 – 未找到

    解决方法

    以交互方式进入容器: [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a9f62ec95602 tomcat:8-jdk8-corretto "catalina.sh run" 15 minutes ago Up 5 minutes 0.0.0.0:8888->8080/tcp tomcat8 [root@localhost ~]# docker exec -it a9f62ec95602 bash bash-4.2# ls BUILDING.txt LICENSE README.md RUNNING.txt conf logs temp webapps.dist work CONTRIBUTING.md NOTICE RELEASE-NOTES bin lib native-jni-lib webapps bash-4.2# 修改Tomcat中的webapp文件夹为webapp2 bash-4.2# mv webapps webapps2 修改Tomcat中的webapp.dist文件夹为webapp【修改完成后 exit 退出】 bash-4.2# mv webapps.dist webapps 创建新镜像 [root@localhost ~]# docker commit -m="update mv webapps" -a="mh" a9f62ec95602 tomcat8 启动新镜像即可 [root@localhost ~]# docker start a9f62ec95602

    Docker安装msyql:

    一、拉取镜像

    去https://hub.docker.com/ 搜索mysql 选择自己需要的版本【这里以5.7.30为例】

    拉取镜像 docker pull mysql:5.7.30 初始化mysql容器 docker run --name mysql5.7 -e MYSQL_ROOT_PASSWORD=123456 -d -p 33608:3306 mysql:5.7.30 --name mysql5.7 【自定义名称】 MYSQL_ROOT_PASSWORD=123456 【root密码】 -p 33608:3306 【配置端口映射】 mysql:5.7.30 初始话的镜像及版本 docker ps 可查看运行中的docker容器

    注意:

    必需指定 【MYSQL_ROOT_PASSWORD、MYSQL_ALLOW_EMPTY_PASSWORD、MYSQL_RANDOM_ROOT_PASSWORD】中的任意一个 不然会出现如下错误: [root@localhost ~]# docker logs 42f09819908b error: database is uninitialized and password option is not specified You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD;这个三个参数必须指定一个 同时若想通过客户端连接mysql需要指定 ip映射

    几个其他的高级操作

    通过配置文件修改mysql容器配置

    docker run --name mysql03 -v /conf/mysql:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag 把主机的/conf/mysql文件夹挂载到 mysqldocker容器的/etc/mysql/conf.d文件夹里面 改mysql的配置文件就只需要把mysql配置文件放在自定义的文件夹下(/conf/mysql)

    直接指定mysql容器配置

    docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci 指定mysql的一些配置参数

    如何设置docker启动后,一些镜像自动启动

    在-d 后添加–restart=unless-stopped下次docker启动后,mysql就会自动启动,如下:

    docker run --name mysql5.7 -e MYSQL_ROOT_PASSWORD=123456 -d --restart=unless-stopped -p 33608:3306 mysql:5.7.30
    Processed: 0.008, SQL: 9