Docker安装及使用


一、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