我是看狂神学的,感觉讲得不错,文章记录的知识都来自他的视频
https://www.bilibili.com/video/BV1og4y1q7M4?p=1

安装

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

尝试运行hello-world

docker run hello-world

帮助命令

docker version        #显示docker版本信息
docker info           #显示docker系统信息
docker 命令 --help    #帮助命令

镜像命令

docker images                   #查看所有镜像
可选参数
        -a                      #列出所有镜像
        -q                      #只显示镜像id
docker search                   #搜索镜像
docker pull                     #下载镜像
docker rmi -f 容器id            #删除镜像
docker rmi -f $(docker images -aq)    #删除所有镜像

容器命令

docker run                        #新建容器并启动
例:
docker run -it nginx /bin/bash
可选参数
        --name=""         #容器名字
        -d                #后台运行
        -it               #交互运行
        -p(小写)          #指定端口 主机端口:容器端口
        -P(大写)          #随机指定端口

docker ps                         #列出所有运行的容器
可选参数
        -a                        #列出所有运行的容器+历史运行容器
        -n                        #列出最近运行的容器,如 -n=1
        -q                        #列出运行容器编号
        
docker rm 容器id                  #删除容器,不能删除正在运行的容器,如果要强制删除 rm -f
docker rm -f $(docker ps -aq)     #删除所有容器

exit                              #停止容器并退出
ctrl+p+q                          #容器不停止退出

docker start 容器id                #启动容器
docker stop 容器id                 #停止容器
docker restart 容器id              #重启容器
docker kill 容器id                 #强制停止当前容器
docker exec 容器id                 #进入容器后开启一个新的终端
docker attach 容器id               #进入容器正在执行的终端
docker cp 容器id:容器内路径 目的主机路径    #从容器内拷贝文件到主机上
docker inspect 容器id              #查看容器详细信息

commit命令

制作自己的镜像

docker commit -m="描述信息" -a="作者" 容器id 目标镜像名
例:
docker commit -m="test" -a="xiaolong" e41c5f808fbf testnginx

数据卷

就是挂载

-v
例:
docker run -it -v 主机目录:容器内目录

具名挂载和匿名挂载

匿名挂载
-v 容器内路径
docker run -d --name ngine01 -v /etc/nginx nginx
#查看所有volume的情况
docker volume ls
local            9f38292179faa178afcce54d80be99d4ddd68c91d2a68870bcece72d2b7ed061

具名挂载
docker run -d --name ngine01 -v juming-nginx:/etc/nginx nginx
docker volume ls
local            juming-nginx

-v 容器内路径            #匿名挂载
-v 卷名:容器内路径       #具名挂载

Dockerfile

就是用来构建docker镜像的构建文件

#创建Dockerfile文件,名字最好就用Dockerfile
#文件内容:
FROM nginx

VOLUME ["volume01","volume02"]

CMD /bin/bash
#然后
docker build -f dockerfile1 -t xiaolongnginx .        #注意这里最后面有一个点
#这时查看docker images就发现已经有这个镜像了
#注意这里volume01和volume02是匿名挂载,挂载在/var/lib/docker/volumes目录下

数据卷容器

#先启动一个容器
docker run -it --name docker01 xiaolongnginx /bin/bash
#再启动第二个容器
docker run -it --name docker02 --volumes-from docker01 xiaolongnginx /bin/bash
#这时两容器的volume01和volume02已经同步了 

Dockerfile指令

FROM                    #基础镜像
MAINTAINER              #镜像是谁写的,姓名+邮箱 xiaolong<xxx@qq.com>
EXPOSE                  #声明端口
WORKDIR                 #镜像的工作目录
VOLUME                  #挂载的目录
ADD                     #添加
COPY                    #拷贝,类似ADD
RUN                     #镜像构建时需要运行的命令
CMD                     #指定这个容器启动时要运行的命令,如果存在多个指令,仅最后一个生效。可被替代
ENTRYPOINT              #类似CMD。可追加
ONBUILD                 #当构建一个被继承dockerfile时运行。是触发指令
ENV                     #构建的时候设置环境变量
#生成镜像
docker build -f dockerfile文件路径 -t 镜像名 .

Docker compose

#安装
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#将可执行权限应用于二进制文件
sudo chmod +x /usr/local/bin/docker-compose

如何使用?看官方给的例子。

mkdir composetest
cd composetest
vim app.py
#app.py
import time

import redis
from flask import Flask

app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)


def get_hit_count():
    retries = 5
    while True:
        try:
            return cache.incr('hits')
        except redis.exceptions.ConnectionError as exc:
            if retries == 0:
                raise exc
            retries -= 1
            time.sleep(0.5)


@app.route('/')
def hello():
    count = get_hit_count()
    return 'Hello World! I have been seen {} times.\n'.format(count)
vim requirements.txt
#requirements.txt
flask
redis
vim Dockerfile
#Dockerfile
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP app.py
ENV FLASK_RUN_HOST 0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD ["flask", "run"]
vim docker-compose.yml
#docker-compose.yml
version: '3'
services:
  web:
    build: .
    ports:
     - "5000:5000"
  redis:
    image: "redis:alpine"
docker-compose up

在这里插入图片描述

Compose配置编写规则

version: "3.7"                    #指定版本
service:            
  web:                            #服务名称
    build: .                      #指定为构建镜像上下文路径
    image: redis                  #指定服务镜像    
  服务2:
    image:
    .....
#其他配置
volume:
network:

关于docker的东西暂时就记录到这了,命令看似很多,但其实自己多敲敲就会发现大部分都很好记。
其中最重要的就是Dockerfile和docker-compose.yml,还是得多看看别人或官方写好的,多看多试试自然也就会了。

最后修改:2023 年 12 月 15 日
如果觉得我的文章对你有用,请随意赞赏