简介
Docker是一个虚拟环境容器,可以将你的开发环境、代码、配置文件等一并打包到这个容器中,并发布和应用到任意平台中。可以很快速的构建中间件环境,让我们不必将精力集中在中间件的安装上,可以更快的使用或者学习,或者将更多的精力专注于业务的开发。
安装
centos7安装docker,docker有CE和EE两各版本,CE为社区免费版,此处我们安装CE版本,首先运行卸载命令,卸载系统中老的docker版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine \
docker-ce
执行第一条语句的时候可能会出现如下错误
是指有一个应用程序正在锁定yum,等待推出
Another app is currently holding the yum lock; waiting for it to exit...
我们需要执行下面命令
rm -f /var/run/yum.pid
安装yum工具
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2 --skip-broken
更新本地镜像源
# 设置docker镜像源
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
yum makecache fast
执行安装命令
yum install -y docker-ce
检查linux防火墙是否关闭
# 关闭
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld
#查看是否关闭防火墙
systemctl status firewalld
启动docker服务
systemctl start docker # 启动docker服务
systemctl stop docker # 停止docker服务
systemctl restart docker # 重启docker服务
systemctl status docker #查看docker状态
systemctl enable docker # 开机自启
出现如下代码则表示docker启动成功
Active: active (running) since Fri 2023-02-10 07:11:32 PST; 38s ago
配置镜像加速
docker官方的镜像加载速度比较差,我们需要配置国内的镜像仓库
sudo mkdir -p /etc/docker #查看etc文件夹下是否有docker文件夹,如果没有则创建一个
创建一个daemon.json
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://akchsmlh.mirror.aliyuncs.com"]
}
EOF
重新加载daemon.json文件
sudo systemctl daemon-reload
重新启动docker
sudo systemctl restart docker
镜像操作
docker是一个容器,主要作用还是用来进行部署其他的中间件或者服务,所以对镜像操作还是它最主要的作用
拉取镜像
找到镜像地址,在此界面搜索需要的镜像,例如直接搜索redis
https://hub.docker.com/
点击进去会看到拉取镜像的代码,复制下来直接执行,等待下载完成
docker pull redislabs/redisearch
查看本地全部镜像
docker images
启动镜像(如果需要挂载文件启动,则参考其他常用命令中的挂载文件启动)
docker run 镜像id
删除镜像
docker image rm 镜像id
或
docker rmi 镜像id
#如果要删除废容器,需要使用CONTAINER ID进行删除,此id在使用docker ps -a查询后的的第一个字段
docker rm 镜像id
或(一次删除多个容器,容器id之间使用空格隔开)
docker rm container CONTAINERID1 CONTAINERID2 CONTAINERID3
如果在删除镜像时报错如下,可以加上-f指令
Error response from daemon: conflict: unable to delete dabe38ef4f00 (must be forced) - image is being used by stopped container aa4132868d34
可以使用如下指令
docker rmi -f 镜像id
修改镜像名称
docker tag 镜像id 新镜像名称:版本
将jar包打包成镜像,通过docker启动
在docker目录下创建app目录,在此目录创建jar包目录(如果是单个则可以不创建,主要是为了解决打包镜像是如果多个jar在同一目录下,会将多个jar包的上下文都打包进来,对效率和资源方面都是不友好的),然后将jar包上传到此目录
创建dockerfile文件,两处的test.jar需要根据实际情况进行更改,并将此文件和jar包放到同目录下
FROM registry.cn-beijing.aliyuncs.com/basetools/oracle-jdk:8u291
MAINTAINER libo3 <libo3@tydic.com>
RUN /usr/glibc-compat/bin/localedef -i en_US -f UTF-8 en_US.UTF-8 && /usr/glibc-compat/bin/localedef -i zh_CN -f UTF-8 zh_CN.UTF-8
RUN mkdir -p /app
copy test.jar /app
WORKDIR /app
CMD java ${JAVA_OPTS} -jar test.jar
EXPOSE 8080
cd到jar包目录下,使用下面命令进行构建镜像文件
#其中manage是自定义名称,用来在镜像目录展示,可以随便起,V1.0是需要展示的版本,空格后的 . 是表示使用我们上传的dockerfile文件配置进行构建打包
docker build -t manage:v1.0 .
执行完毕以后就可以使用docker images进行查看了
其他常用命令
查看docker版本
docker -v #查看docker版本
获取容器详细信息(包括容器名称)
docker ps
进入容器
docker exec -it 容器名 /bin/bash
查看日志
docker logs -f 容器id
查询容器id
#可以查询容器id字段
docker ps -q
#可以参与批量停止和批量删除容器的操作
docker stop`docker ps -a -q`
docker rm`docker ps -a -q`
启动nacos,如果是单机环境,启动时需要添加MODE=standalone,MODE必须大写,启动以后可以解决页面访问不到的问题
docker run -p 8848:8848 -e MODE=standalone --name nacos01 -d nacos/nacos-server
启动nginx
docker run -d --name nginx -p 80:80 nginx
启动mysql
docker run --name mysql -v /home/ljaer/mysql:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123 -d mysql:latest
挂载文件启动redis
docker run -itd -p 6379:6379 --name 容器名 -v /docker/redis/conf/redis.conf:/etc/redis/redis.conf -v /docker/redis/data:/data redis redis-server /etc/redis/redis.conf
--name:给容器起一个名字;
-p:端口映射(宿主机端口:容器端口);
-v:挂载自定义配置(自定义配置:容器内部配置);
本命令共有两个挂载:Linux 上自定义的 redis 配置(/docker/redis/conf/redis.conf)挂载到容器内 redis 应用的默认配置文件 /etc/redis/redis.conf;Linux 上自定义的数据存放目录(/docker/redis/data)挂载到容器内 redis 应用的默认数据存放目录(/data)。这样 docker 容器内的 redis 应用会使用 Linux 上自定义的配置文件,docker 容器内的 redis 应用的数据会放到 Linux 上自定义的数据存放目录。
-itd:i:以交互模式运行容器,通常与 -t 同时使用;t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;d:后台运行;
redis-server --appendonly yes: 在容器执行 redis-server 启动命令,并打开 redis 持久化配置;
注意事项
在容器中不挂载配置文件启动redis以后远程无法访问的问题,确保防火墙已经关闭
解决方式一:我们可以通过进入容器内部进行测试redis是否可以使用
解决方式二(推荐):使用挂载文件,并配置redis远程访问功能,启动以后就可以进行远程访问了