文章附有docker下载安装包文件
一、docker安装(通过yum安装)
1、下载关于Docker的依赖环境
yum -y install yum-utils device-mapper-persistent-datalvm2
使用yum工具下载
yum是软件包管理工具
通过 执行 man yum
可以查看yum的帮助信息
2、设置下载Docker的镜像源
依赖环境下载完毕以后,设置下载的镜像源,如果不设置,会默认去Docker的官方下载,但是官方的服务器在国外,下载会比较缓慢,设置下载国内的镜像源(镜像就是英文单词image)
###使用国内的阿里云
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
输入以上代码 回车,如下图所示:
3、安装docker
###首先,下面这个命令是将软件包信息提前在本地缓存一份,用来提高搜索安装软件的速度
yum makecache fast
###提高安装速度以后,安装docker相关的。(docker-ce 社区版 而ee是企业版)
yum install docker-ce docker-ce-cli containerd.io
4、启动
4.1 启动Docker服务
systemctl start docker
4.2 设置开机自动启动
systemctl enable docker
二、docker安装(通过本地docker安装包)
cd /usr/local/src
tar -zxvf docker-24.0.2.tgz
cp docker/* /usr/bin/
验证是否安装成功,执行docker info命令
docker info
vi /usr/lib/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
#启动docker
systemctl start docker
#设置开机自启动
systemctl enable docker
三、Dockerfile编写&&镜像构建说明
1、前提
编写Dockerfile最好一个项目对应一个目录,不要把多个Dockerfile放在一起,因为根据Dockerfile构建镜像的时候,只会找名为Dockerfile的文件来构建。
2、Dockerfile内容
1、FROM
这个指的是以什么为基础镜像构建,因为Dockerfile都是构建后端的包,而后端的jar包需要jdk才能启动,所以此处指定使用openjdk:11为基础镜像。
2、WORKDIR&&ADD
如果没有指定WORKDIR,那么默认的添加构建到镜像中的路径为根目录/。
此处则是把与Dockerfile同一目录下的 system-4.0.0.jar与application-test.yml放到镜像中的根目录下
ADD system-4.0.0.jar anquandun-test.jar
ADD application-test.yml .
如果指定了WORKDIR,如图,则WORKDIR /home/sn以后的ADD命令都是将文件放置在了容器中的/home/sn这个目录里下。
3、ENTRYPOINT
如图,此参数则是关于docker容器启动以后,java的jar包的启动命令。
编写完成后,保存退出。
3、构建镜像
在Dockerfile所在的目录。
###构建镜像命令
docker build -t <镜像名>:<tag> .
例:
docker build -t ck-master:1.0 .
此时就将构建一个名为ck-master,tag为1.0的镜像。
注意,tag后面空一格有一个点“.”,千万不能缺少了。
四、docker常用命令
1、一键重启所有容器
docker restart $(docker ps -a -q)
2、启动所有停止的容器
docker ps -a | grep Exited | awk '{print $1}' |xargs docker start
3、docker清理
3.1、清除所有没有容器引用的镜像(慎用)
docker system prune -a
参数:-a : 清除所有没有容器引用的镜像时,使用 docker system prune -a (慎用)-f or --force
强制清除,不会出现提示,使用docker system prune -f(慎用)--filter :
用来限制要保留的镜像的范围,例如:只清除超过创建时间超过24小时的镜像(docker image prune -a --filter "until=24h")
3.2、删除所有已经停止的容器
docker rm $(docker ps -a|grep Exited |awk '{print $1}')docker rm $(docker ps -qf status=exited)
3.3、删除所有未打标签的镜像
docker rmi $(docker images -q -f dangling=true)
3.4、删除所有无用的volume
docker volume rm $(docker volume ls -qf dangling=true)
4、docker更换存储目录
4.1、查看默认储存位置 "Docker Root Dir"(此时已改,所以是自定义的路径),默认是/var/lib/docker
docker info
4.2、关闭docker服务
#先关闭所有在运行的容器
docker stop $(docker ps -a -q)
#关闭docker服务
systemctl stop docker.service
4.3、在目的盘创建新的文件夹,并移动原来的镜像和容器
mkdir /home/chenjian/docker_data
cd /home/chenjian/docker_data
cp -r /var/lib/docker .
4.4、修改docker的配置文件,指定新存储位置。并设置阿里云镜像加速
具体registry-mirrors请百度查询获取
sudo vim /etc/docker/daemon.json #没有就创建
#添加内容如下
{
"data-root": "/home/chenjian/docker_data",
"registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"]
}
4.5、加载配置文件,重启服务
sudo systemctl daemon-reload
sudo systemctl restart docker
4.6、此时除了mysq之外的容器都能启动
mysql如果不能启动,则给迁移过去的目录赋权777
chmod -R 777 XXXX
5、让普通用户能执行docker
默认情况下,docker只能由root用户执行命令操作。
修改/var/run/docker.sock用户权限为root用户,docker组,然后将普通用户添加进docker组,这样普通用户就可以操作docker命令,具体命令如下:
5.1、添加docker用户组
groupadd docker
5.2、添加用户进docker组
gpasswd -a 用户名 docker
5.3、更新用户组
newgrp docker
5.4、重启docker
systemctl restart docker
6、镜像导出与导入
6.1、导出
语法:docker save -o XXXX.tar <镜像名>:<tag> <镜像名>:<tag> ...
其中XXXX.tar可自定义,为导出的镜像,可以把多个镜像导出为一个tar文件。
6.2、导入
docker load -i XXXX.tar
其中XXXX.tar为需要导入的镜像包文件。
7、容器设置开机启动
###查看 Docker 容器是否设置了自动拉起
docker inspect --format='{{ .HostConfig.RestartPolicy.Name }}' <容器名称或ID>
###设置容器开机自启动
docker update --restart always <容器ID或名称>
8、虚悬镜像解释
当已经有一个名为mysql:1.0的镜像的时候,此时又制作了一个一模一样的mysql:1.0镜像,那么此时就会形成虚悬镜像,如下图所示,最初的mysql:1.0镜像的tag则会变成<none>。
所以尽量避免镜像的名称与tag一模一样。
9、动态加载docker配置文件
当/etc/docker/daemon.json文件被修改了后,执行
systemctl reload docker来加载。
此时就不需要重启docker,造成运行中的容器被迫停止了。