一、Docker安装
1、安装依赖包
yum install yum-utils device-mapper-persistent-data lvm2 -y
2、设置stable镜像仓库
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
或
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3、更新yum软件包索引
yum makecache
4、安装docker
yum list docker-ce.x86_64 --showduplicates | sort -r #从高到低列出Docker-ce的版本
yum -y install docker-ce
5.添加配置文件
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"],
"data-root": "/home/docker",
"exec-opts": ["native.cgroupdriver=systemd"],
"dns": [ "114.114.114.114","223.5.5.5","8.8.8.8" ]
}
5、启动docker
useradd -g docker docker
systemctl enable docker
systemctl start docker
注意:如果用journalctl -xe查看启动出现:Failed to listen on Docker Socket for the API.
vi /usr/lib/systemd/system/docker.socket
SocketGroup=root # 这里原来是docker改成root即可,保存退出
systemctl daemon-reload
systemctl start docker
6、测试docker
docker version
安装docker-compose
自动:yum install docker-compose -y
手动:
https://github.com/docker/compose/releases
下载docker-compose-Linux-x86_64到/usr/local/bin/
重命名docker-compose-Linux-x86_64为docker-compose
添加可执行权限chmod +x /usr/local/bin/docker-compose
二、镜像使用
1、搜索镜像
docker search <image>
2、下载镜像
docker pull <image>
3、查看当前所有镜像
docker images
4、删除镜像
docker rmi <image ID>
三、容器使用
1.使用镜像启动创建容器
创建 docker 卷,命令将在/var/lib/docker/volumes目录中创建一个卷
docker volume create data_volume1
docker volume ls
挂载启动
docker run -v <data_volume1>:<容器目录> -itd <image ID> -p <host_port:contain_port> --name xxx --restart=always /bin/bash
采用主机网络模式:
docker run -v <data_volume1>:<容器目录> -itd <image ID> --net=host --name xxx --restart=always /bin/bash
查看挂载:docker inspect (容器ID)
日志查看:docker logs -ft --tail 1000 <container>
2.查看容器
docker ps -a
3.开启/停止/重启容器
docker start/stop/restart <container>
4.进入正在运行的docker容器
docker exec -it [container_id] /bin/bash
5.删除容器
docker rm <container...>
6.查看docker占用宿主机的磁盘空间
docker system df
docker container ls:-a 选项会列出包括停止的所有容器。
docker inspect containerId 去查看这container的详细信息
docker image ls:-a 选项会列出 intermediate 镜像(就是其它镜像依赖的层)。
docker volume ls:列出数据卷。
docker network ls:列出 network。
docker info:显示系统级别的信息,比如容器和镜像的数量等。
7.删除某类资源
docker container prune # 删除所有退出状态的容器
docker volume prune # 删除未被使用的数据卷
docker image prune # 删除 dangling 或所有未被使用的镜像
四、生成持久化容器与镜像
1.通过容器生成新的镜像
docker commit <container> [repo:tag] # 将一个container固化为一个新的image,后面的repo:tag可选。
2.导出容器
docker export <CONTAINER ID> > /tmp/export.tar
3.导出镜像
docker save <IMAGES ID> > /tmp/save.tar
4.导入容器(导入export.tar文件)
cat /tmp/export.tar | docker import - export:latest
5.导入镜像(导入save.tar文件)
docker load < /tmp/save.tar
6.对image打tag
docker tag xxxx name:version
五、宿主网络配置
1.安装网络工具
yum -y install bridge-utils
2. 停止、删除网桥 docker0
ip link set dev docker0 down
3.删除:
brctl delbr docker0
4.创建新的网桥
brctl addbr docker0
5.设置网桥IP 为docker0分配物理网络中的ip地址
ip addr add 192.168.99.111/24 dev docker0
6.启动网桥
ip link set dev docker0 up
7.启动成功后,查看:
brctl show
8.修改 docker 启动设置
这里要注意的是,不同的linux操作系统docker的配置文件所在不同
vi /usr/lib/systemd/system/docker.service
添加选项 -b docker0在
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
这行中修改为
ExecStart=/usr/bin/dockerd -b docker0 -H fd:// --containerd=/run/containerd/containerd.sock
即让docker服务启动时使用docker0网卡进行桥接
9.重启docker服务
systemctl daemon-reload
systemctl restart docker
六.docker compose常用命令
#验证(docker-compose.yml)文件配置,当配置正确时,不输出任何内容,当文件配置错误,输出错误信息
docker-compose config -q
# 在后台启动服务
docker-compose up -d
# -f 指定使用的 Compose 模板文件,默认为 docker-compose.yml,可以多次指定。
docker-compose -f docker-compose.yml up -d
docker-compose -f docker-compose.yml up -d --build --force-recreate --remove-orphans (重建)
#启动多个相同的容器
docker-compose -f docker-compose.yml up -d --scale nginx=3
# 查看启动的服务
docker-compose ps
#启动已经存在的服务容器
docker-compose start
#停止服务
docker-compose stop
#停用移除所有容器以及网络相关
docker-compose down
#查看服务容器的输出
docker-compose logs
七、其他
1.autopush.sh
#!/bin/bash
for line in $(<"/root/.env"); do export $line; done
/usr/bin/docker push money.xx.com:7070/nginx/school_name:system_name_${nowDate}
/usr/bin/docker push money.xx.com:7070/tomcat/school_name:system_name_${nowDate}
2.autossh.sh
#!/usr/bin/expect
#20210811
set timeout -1
spawn ssh-keygen -t rsa
expect {
"*(/root/.ssh/id_rsa)" {send "\n\r";exp_continue}
"*(empty for no passphrase)" {send "\n\r";exp_continue}
"*again" {send "\n\r"}
}
expect eof
3.envrun.sh
#!/bin/bash
/bin/echo nowDate=$(date +"%Y-%m-%d_%H-%M-01") > "/root/.env";
#在/root/.bashrc 下加入以下命令
#for line in $(<"/root/.env"); do export PATH=$PATH:$line; done