docker!亲手带你玩转docker
鉴于自己对docker理解不好,于是特意来学习一下。
0x00 什么是docker
软件的打包技术,就是将算乱的多个文件打包为一个整体,打包技术在没有docker容器之前,一直是有
这种需求的,docker打包出来的每个软件,称之为docker镜像。可以说整个IT领域,不管是哪个工种,都需要好好学
习docker。
docker是CS架构
的程序,客户端控制服务端
来做各种事情。
镜像:images,是个压缩包文件,里面存放着安装好的程序。
容器:Container,Docker利用容器来运行应用。容器是从镜像创建的运行实例。它可以被启动、开始、停
止、删除。每个容器都是相互隔离的、保证安全的平台。
0x01 docker的安装
这里只讲linux下的安装
#添加docker的gpg密钥,签名用的
curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian/gpg |
sudo apt-key add -
#添加docker的apt源
echo 'deb https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian/ buster
stable' | sudo tee /etc/apt/sources.list.d/docker.list
#更新apt缓存
apt update
#安装docker
sudo apt-get install docker docker-compose -y
或
sudo apt-get install docker.io
#安装完成之后,docker就自动启动了
systemctl status docker
#查看docker版本
docker -v
1.添加docker的gpg密钥,签名用的
2.添加docker的apt源(加快访问速度)
3.apt update 更新一下apt缓存
4.任意方式安装docker,由于我安装过了,就就不安装了。
sudo apt-get install docker docker-compose -y
或 sudo apt-get install docker.io
5.设为开机自启
systemctl enable docker
6.更改docker镜像库的源
cd /etc/docker
vim docker.json
# 添加如下内容,并保存退出
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
# 可以重启docker服务
systemctl restart docker
0x02 镜像基本命令
docker search #搜索镜像(只搜索官方仓库的,官方仓库地址:hub.docker.com)
比如搜索docker search php,就会在镜像库中搜索关于php的镜像
docker images 查看本地镜像列表
dcoker pull 拉取镜像
docker pull tomcat:latest
比如拉取固定版本的php,docker pull php:7.15
docker push 上传镜像,推送镜像,推到官方仓库,需要在本地登录一下官方账号
docker rmi
#删除镜像,rm image的意思,直接rm不加i表示要删除容器
,可以通过名称加版本来删除,或者直接通
过镜像id值来删除
#docker rmi tomcat:latest 或者 docker rmi imageid值
#可以同时删除多个镜像:docker rmi tomcat:latest tomcat:jre17-temurin-jammy
#如果这个镜像处于运行状态的是删除不了的
,比如有容器在使用这个镜像,就不能删除镜像,比如
docker rmi nginx:1.16会报错
docker container ls 或者docker ps 查看镜像的运行状态
第一个就是容器值
docker save
#导出镜像(压缩包) docker save 镜像名称:版本 -o docker_nginx1.20.tar.gz
#docker save nginx:1.16 -o docker.nginx1.16.tar.gz
#ls 就看到了 docker.nginx1.16.tar.gz
docker load
#导入镜像 docker load -i docker_nginx1.20.tar.gz,会自动解压并导入到docker服务中
0x03 容器常见命令
docker run 运行一个新容器
docker run -d -p 82:80 nginx:1.16
例如这个-p是指定端口的意思。82:20是端口映射
。例如后面的80是容器的端口,前面的82是运行docker的端口。
-d #放后台运行
-p 端口映射 #例子: -p 宿主机端口:容器端口
--name 指定容器的名字 # docker run -it --name jaden 镜像id或者名称
--link 关联另一个容器 # 了解即可
-e MYSQL_ROOT_PASSWORD #设置容器的一些属性,了解一下即可
-it #是给运行起来的这个容器分配一个终端,就可以进入到容器内部操作了
docker ps === docker container ls #参数: 默认之显示up状态的容器,-a查看所有容器,或者--all
docker stop 停止容器 #例子 docker stop 容器id或者容器名字
docker kill 杀掉容器
#强制关闭容器,尽量不要用,很容易就启动不了了
docker start 启动容器
#例子 docker start 容器id或者容器名字
docker restart 重启重启
#例子 docker restart 容器id或者容器名字
docker rm 删除容器
#例子 docker rm 容器id或者容器名字,同时删除多个,就空格隔开,处于up状态是不能直接删除的,强制删除是可以删除up状态的容器的,docker rm f 容器名称或者id
docker rm -f `docker ps -a -q` #删除所有容器,-q是只显示容器id,反引号中的指令优先执行
docker top 查看容器内的进程
#例子docker top 容器id或者容器名字
docker stats 查看容器的资源占用情况
docker exec 进入容器
#例子: docker exec -it 容器id
或者容器名字
# 直接交互指令:docker exec -it 76738703b7b2 ls # 执行ls指令
# 进入终端:docker exec -it 76738703b7b2 /bin/bash
或者/bin/sh #/bin/bash打开一个终端窗口,exit指令退出终端
docker inspect -f '{{.Name}} => {{.NetworkSettings.IPAddress }}' $(docker ps -aq) 可以查看所有容器的ip地址的,
容器的ip地址是从`172.17.0.1`开始分的。docker容器类似于一个
微型的虚拟机,它占用的都是宿主机(物理机)的资源。在物理机上是可以看到容器所运行的程序的。每个容器都有自己的ip地址。
docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}
{{.IPAddress}}{{end}}' $(docker ps -aq) | grep "容器名称或者id"
0x04 实验安装wordpress
这里自动安装并启动了mysql5.7的服务。指定了root密码是123456,命名为mysql
自动拉取了wordpress5.6,并在86端口运行,与mysql链接。这么就不用自己配置数据库信息了。
访问86端口,成功进入安装界面
0x05 docker-compose
docker-compose是批量管理docker容器的工具,比如前面我们启动的wordpress项目,需要启动两个容器才行,有时候就是这样,需要同时启动多个容器来
完成你想要做的事情,但是到底启动多少个容器呢?比如wordpress那个,我们记不住,换一个机器不看笔记
很难起来,有了docker-compose就可以解决这个问题了。
apt install docker-compose
docker-compose -v 查看版本
以下是一个标准的yaml文件。我只是了解一下docker,并不用学这么深入,我就跳过了。
# 将如下内容拷贝到文件中保存退出,注意拷贝的时候,把里面我标记的注释去掉。
# 注意,下面这个文件内容是严格要求格式的,多一个空格都不行,通过缩进来表示等级关系,下面的这种配
置语法叫做yaml语法
version: '3' # docker-compose.yml的文件格式版本
services:
db: #容器名称
image: mysql:5.7
restart: always # 开机自启动的意思
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: 123456 # 和下面的WORDPRESS_DB_PASSWORD值要对应上
wordpress:
depends_on:
- db
image: wordpress:5.6
ports:
- "83:80" # 端口映射
restart: always
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: 123456
docker-compose常见命令
#创建并启动
docker-compose up -d # 启动之后就可以通过浏览器访问了
#停止并删除
docker-compose down
#重启
docker-compose restart
#停止
docker-compose stop
#启动
docker-compose start