Docker

Docker

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、对容器的启动停止就是对这个软件的启动停止

安装Docker

​ 1、检查内核版本,3.10及以上

uname -r

​ 2、安装Docker

apt-get -y install docker

​ 3、启动Docker

systemctl start docker

​ 4、检查版本

docker -v

​ 5、设置开机启动

systemctl enable docker

​ 6、停止Docker

systemctl stop docker

Docker基本操作

1、搜索镜像,比如搜索mysql(会从 Docker Hub 中搜索 http://hub.docker.com

docker search mysql

2、下载镜像

#默认下载latest版本
docker pull mysql 

#指定版本下载
docker pull mysql:5.5

3、查看docker中有多少镜像

docker images

4、删除指定镜像

docker rmi 加上imageId

Docker容器操作

​ 软件镜像(QQ的安装程序)----> 运行镜像(运行安装程序)----> 产生一个容器(运行的QQ)

步骤:

​ 1、搜索镜像

docker search tomcat

​ 2、拉取镜像

docker pull tomcat

​ 3、根据镜像启动容器

docker run --name mytomcat -d tomcat:latest

注意:mysql 不可以此方式启动,会异常退出 正确启动方式见下方

​ 4、查看运行中的容器

docker ps 

​ 5、停止运行中的容器

docker stop 名字 或 CONTAINERID(容器的id)
#例如
docker stop dec70e978492
#或
docker stop mytomcat

​ 6、查看所有的容器(运行的和退出的)

docker ps -a

​ 7、重新启动容器

docker start dec70e978492  (容器id) 
#或
docker start mytomcat (名字)

​ 8、删除容器(删除的容器必须是停止状态)

docker rm dec70e978492(容器id)
#或
docker rm mytamcat(名字)

​ 9、启动容器并配置端口映射

docker run -d -p 8888:8080 tomcat

-d:后台运行

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

​ 启动之后,浏览器访问 ip:8888 即可访问容器中的 8080 端口

​ 查看防火墙状态:

service firewalld status

​ 关闭防火墙:

service firewalld stop

11、查看容器的日志

docker logs ce5a33d06152(容器id)
#或
docker logs mytomcat(名字)

12、一个镜像可以启动多个容器

docker run -d -p 8887:8080 tomcat 
docker run -d -p 8888:8080 tomcat 
docker run -d -p 8889:8080 tomcat 

​ 使用一个镜像启动三个独立运行的容器(互不干扰)

使用mysql

mysql错误启动方式:

docker run --name mysql01 -d mysql

#此时并没有启动,这个mysql容器会异常退出:
#通过 docker ps -a 指令查看 mysql01 这个容器的状态为: Exited (异常退出)

#查看错误日志:
docker logs mysql01
`You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD`(这三个参数必须指定一个)


正确启动方式:

#删除之前的错误容器
docker rm mysql01  或 docker rm `这个容器的ID`

#使用 -e 指定参数
docker run --name mysql01 -e MYSQL_ROOT_PASSWORD=root -d mysql

#指定端口映射
docker run --name mysql01 -e MYSQL_ROOT_PASSWORD=root -p 3307:3306 mysql

映射端口启动:

#删除之前的错误容器
docker rm mysql01  或 docker rm `这个容器的ID`

#映射端口启动
docker run 

进入Docker容器中的mysql:

#进入mysql01容器
docker exec -it mysql01 bash #无任何显示表示成功
mysql -uroot -p 
#输入密码~~

解决mysql连接报错 :

#先进入docker中的mysql
docker exec -it mysql01 bash
#输入密码进入
mysql -uroot -p
#输入
select Host,User,plugin from mysql.user;
#然后输入
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密码';
ALTER USER 'vuluser'@'%' IDENTIFIED WITH mysql_native_password BY '密码';

#或者,配置一下/etc/my.cnf
[mysqld]
default_authentication_plugin=mysql_native_password

docker启动Redis并设置密码:

docker run -d --name myredis -p 6379:6379 redis --requirepass "mypassword"

数据挂载到本地磁盘启动docker容器

docker run --name edu-mysql -d -p 3307:3306 -v /usr/local/sqlData/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root mysql

docker run -d --privileged=true -p 6380:6379  -v /usr/local/redisData/conf/redis.conf:/etc/redis/redis.conf -v /usr/local/redisData/data/:/data --name edu-redis redis redis-server /etc/redis/redis.conf --appendonly yes
--requirepass "abc123456"

停止所有容器

docker stop $(docker ps -aq)

删除所有容器

docker rm -f $(docker ps -aq)

如何将自己的项目jar包打包成docker 镜像

首先将自己的项目打包成jar,并在自己本地先用java -jar xxx.jar启动下,看是否可以启动。
随后将自己的jar包同级目录创建一个Dockerfile文件,并用notepad打开
文件无后缀。

FROM kdvolder/jdk8
VOLUME /tmp  #挂载的docker卷
#xxx.jar 自己的jar包  xxxx.jar 自定义的jar包名
ADD xxx.jar xxxx.jar
#RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/xxxx.jar"] #上面自定义的jar包名称
EXPOSE 项目端口号

将自己的jar包和写好的Dockerfile通过xftp上传到服务器。
切换到 jar包 和 Dockerfile文件 所在路径,执行打包命令

#最后的点不能少
#-t 给新构建的镜像取名
docker build -f Dockerfile -t 镜像名称:版本名 .
#如果不指定镜像名和版本名
#使用下面的命令指定打包完的镜像
docker tag 镜像id eureka-server:latest

启动镜像

docker run -d -p 主机端口号:项目端口号 镜像id

查看镜像日志

docker logs 容器id

docker挂载目录失败/权限拒绝 解决方案

把宿主机的一个目录挂载到容器中的一个目录,当访问容器中的这个目录时,出现无法访问目录,权限拒绝。

该问题通常在centos7下出现。或者一个容器启动成功后,里面的服务无法成功访问,这是因为centos7中的安全模块selinux把权限禁掉了,一般的解决方案有以下两种:

(1)临时关闭selinux
直接在centos服务器上执行以下命令即可。执行完成以后建议重新docker run。

setenforce 0

(2)给容器加权限
在docker run时给该容器加权限,加上以下参数即可:

--privileged=true

一般都推荐使用这种方式。

posted @ 2021-08-09 20:39  奇怪的阿峰  阅读(95)  评论(0)    收藏  举报