目前docker和docker-compose 逐渐普及流行,故记录一些常见操作,以备查看。
1.检查内核
Centos系统内核要不低于3.10。查询当前内核版本:
uname -r
2.移除旧版的docker
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
3.Docker依赖的工具
yum install -y yum-utils device-mapper-persistent-data lvm2
4.添加软件源
这里我们添加的是阿里云的软件源:
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
官方的软件源为:
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
5.安装docker
查看可进行安装的docker版本
yum list docker-ce --showduplicates | sort -r
我们可以使用这种格式进行安装指定版本
yum install docker-ce-
这里为:
yum install docker-ce-20.10.12 docker-ce-cli-20.10.12 containerd.io
6.启动docker
systemctl start docker
7.添加国内加速地址
vi /etc/docker/daemon.json 文件,修改为如下形式
{
"registry-mirrors": [
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn",
"https://registry.docker-cn.com"
]
}
加载重启docker
systemctl restart docker
查看是否成功
docker info
8.官方镜像源
Docker Hub
官方帮助文档:
Install Docker Engine on CentOS | Docker Documentation
下载docker-compose
可以直接在机器执行以下命令:
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
或者直接在浏览器上打开https://github.com/docker/compose/releases 找到对应的版本,下载放到/usr/local/bin/目录下面
赋予权限
chmod +x /usr/local/bin/docker-compose
如果出现docker-compose不存在,则执行以下命令:
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
官方帮助文档
Install Docker Compose | Docker Documentation
Compose V2 帮忙文档:Compose V2 | Docker Documentation
docker version #显示docker的版本信息
docker info #显示详细的系统详细,包括镜像和容器的数量
docker命令 --help #显示该命令的详细信息,以及使用方法
查看镜像
docker images #查看本地主机上的镜像
docker images -a #列出所有镜像
docker images -q #只显示镜像的id
搜素镜像
docker search镜像名
#参数介绍 --f 过滤选项
实例:docker search --filter=SIZE=5000 mysql
下载镜像
docker pull 镜像名 #默认下载最新版本的镜像
docker pull 镜像名:版本号 #下载指定版本
删除镜像
docker rmi -f 镜像id #删除镜像,必须停止并且删除容器后,才可以删除镜像
docker rmi -f 镜像id 镜像id #删除多个镜像
docker rmi -f $(docker image -aq) #删除所有本地的镜像
我们只有有了镜像,才可以常见容器,容器运行在镜像上面
新建并启动容器
docker run [选项] 镜像名
#选项解释
docker run --name='centos01' #容器的名称,用于区分同一镜像创建的不同容器
docker run -d #后台运行
docker run -it #交互式运行,并进入容器查看内容
docker run -p 容器端口 #指定容器的端口
docker run -p ip:主机端口:容器端口
示例:docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py
指定映射使用一个特定地址。
docker run -p 主机端口:容器端口
示例:docker run -itd --name hfish -p 80:5000 threatbook/hfish-server
容器里80端口映射给宿主机的5000端口,通过宿主机绑定本地IP(所有接口上的所有地址):5000访问该项目的主页。
docker run -P #Docker会随机映射一个49000~49900 的端口到内部容器开放的网络端口。
示例:docker run -d -P training/webapp python app.py
app.py启动web 应用提供的界面是5000端口,docker将本地主机的 49155 被映射到了容器的 5000 端口,此时访问本机的 49155 端口即可访问容器内 web 应用提供的界面
列出运行的容器
docker ps #列出正在运行的容器
docker ps -a #列出正在运行的容器+历史上运行的容器
启动容器
docker start 容器id
docker restart 容器id
停止容器
docker stop 容器id
docker kill 容器id #强制停止容器
进入容器
docker exec -it CONTAINER ID(容器的编号) /bin/bash #进入容器后,会开启新的终端,在里面操作
exit # 退出并停止容器
Ctrl+q+p #退出不停止容器
docker attach 容器id #进入容器后,不会开启新的终端,直接使用正在运行的终端
删除容器
docker rm 容器id #删除指定容器,不可以删除正在运行中的容器
docker rm -f 容器id #可以删除正在运行中的容器
docker rm -f $(docker ps -aq) #删除所有容器
容器和宿主机互相拷贝文件
docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径
把宿主机/downloads/packages.txt 拷贝到 ubuntu1.2容器的/home
docker cp /downloads/packages.txt ubuntu1.2:/home
docker cp 容器名:要拷贝的文件在容器里面的路径
要拷贝到宿主机的相应路径 例:
把容器 ubuntu1.2里面的/downloads/a,txt 拷贝到宿主机中/downloads中
docker cp ubuntu1.2:/downloads/a.txt /downloads
查看日志
docker logs 容器id
docker logs --tf --tail 日志显示条数 容器id
查看容器中的进程数
docker top 容器id
查看镜像的元数据
docker inspect 容器id
进入容器
docker ps # 获取到容器CONTAINER ID
docker exec -it CONTAINER ID(容器的编号) /bin/bash #进入容器
docker exec -it CONTAINER ID(容器的编号) bash #进入容器
删除镜像
docker ps -a # 获取到容器ID (CONTAINER ID)
docker stop CONTAINER ID #停止容器,如果容器不是运行状态,则不需要该命令。
docker rm CONTAINER ID #删除指定容器,不可以删除正在运行中的容器
docker image ls # 获取镜像ID (IMAGE ID )
docker image rm IMAGE ID # 删除镜像
如果删除过程中,提示Error: No such image: e969dc171c5d 需要进行如下操作:
cd /var/lib/docker/image/overlay2/imagedb/content/sha256
docker image ls # 获取镜像ID (IMAGE ID),例如e969dc171c5d
ll |grep e969dc171c5d
rm -rf e969dc171c5d45549936e620d0354585f5d2554ab014159de8e2c48d4e1cadc7
docker image ls # 查看一下,是否删除了
开通防火墙策略
firewall-cmd --add-port=4434/tcp --permanent #宿主机的端口4434开放到网络上
firewall-cmd --reload #配置生效
docker dns 解析出现问题
firewall-cmd --zone=public --add-masquerade --permanent
firewall-cmd --reload #配置生效
systemctl restart docker
以下操作必须在存在 docker-compose.yml, docker-compose.yaml, compose.yml, compose.yaml文件的目录下操作
创建容器
docker-compose up -d #第一次使用的时候,会创建全部最新的容器
docker-compose up [容器名称] --force-recreate #重建docker-compose.yml的单个容器
启动容器
docker-compose start [容器名称] #启动docker-compose.yml的单个容器
docker-compose start # 启动docker-compose.yml的所有容器
docker-compose restart [容器名称] # 重新启动docker-compose.yml的单个容器
docker-compose restart # 重新启动docker-compose.yml的所有容器
停止容器
docker-compose stop [容器名称]
docker-compose stop # 停止docker-compose.yml的所有容器
显示日志
docker-compose logs [容器名称]
删除容器及其数据
docker-compose down #删除docker-compose.yml的单个容器
docker-compose down -v #除docker-compose.yml的容器及其数据
docker-compose down [容器名称] #删除docker-compose.yml的单个容器
更新容器
docker-compose down [容器名称] #删除docker-compose.yml的单个容器
docker-compose down #删除docker-compose.yml的单个容器
docker-compose pull [容器名称]
docker-compose up [容器名称] --force-recreate
升级所有容器
git pull
docker-compose pull
docker-compose stop
docker-compose up -d