Docker基本入门指令 | 青训营

272 阅读4分钟

抽空学习了下docker,阅读了站内的一些文章:Docker 入门教程-阮一峰 - 掘金 (juejin.cn)
赶紧收藏!我直接上瘾!百万人都在学的Docker - 掘金 (juejin.cn)
在这里整理一些简单的入门知识。 顺便推荐一个学习课程:Docker Training Course for the Absolute Beginner | KodeKloud,本文的图片便来源于该课程。

1 基本指令

command选项作用备注
docker run ID/Namengnix镜像不存在会进行拉取镜像不存在则会自动拉取
启动后的指令启动容器并执行指令docker run ubuntu sleep 5
-d在后台运行容器,并且打印容器id
-i以交互模式运行容器it通常一起使用,-i是主体
-t为容器重新分配一个伪输入终端docker run centos -it bash
docker attach ID/Name进入容器正在执行的终端
docker ps列举所有正在运行的容器
-q列举所有容器的id
-a包括已停止的容器
docker stop ID/Name停止容器
docker rm ID/Name删除容器
docker images查看镜像
-q查看镜像id
docker rmi ID/Name删除镜像
docker pull images拉取镜像
docker exec ID/Name command在容器中执行指令docker exec centos cat /etc/hosts
docker login登录docker账户

2 Docker Run 命令

# 1 版本选择:":" + TAG
docker run ubuntu:22.04

# 2 端口映射
docker run -p 5000:8080 -it -d c6e
# 将容器内的8080端口映射到宿主机的5000端口
# 可以运行多个不同端口映射的容器

# 3 文件夹映射
docker run -v dockerFile:/var/lib centos

# 4 查看容器详细信息
docker inspect ID/Name

# 5 查看日志信息
docker logs 

# 6 赋予用户权限
docker run -u root ID/Name
# 7 给容器取名
docker run --name=dockerName  ...

3 Docker Images 编写和运行

3.1 Dockerfile的编写

# An example
FROM Ubuntu
RUN apt-get update
RUN apt-get install python
RUN pip install flask
RUN pip install flask-mysql
COPY · /opt/source-code # 将源码打包进image
ENTRYPOINT FLASK_APP=/opt/source-code/app.py flask run # 容器启动后执行的指令

用dockerfile build image

docker build Dockerfile -t mmumshad/my-custum-app
# mmumshad表示account, my-custum-app表示name

上传docker镜像

docker push mmumshad/my-custum-app

为容器设置环境变量

docker run -e APP_COLOR=green simple-webapp-color

3.2 Dockerfile中设置运行命令

3.2.1 CMD

FROM ubuntu
CMD sleep 5

也可以使用json格式

# 格式 CMD ["command", "param"]
FROM ubuntu
CMD ["sleep", "5"]

命令行:

docker run  ubuntu-sleeper sleep 10
# Overide the Dockerfile

3.2.2 ENTRYPONIT

FROM ubuntu
ENTRYPOINT ["sleep"]

命令行:

docker run  ubuntu-sleeper 10
# get appended

3.2.3 同时使用CMD和ENTRYPONIT

FROM ubuntu
ENTRYPOINT ["sleep"]
CMD ["5"]

命令行:

docker run  ubuntu-sleeper
# 覆盖ENTRYPONIT
docker run --entrypoint sleep2.0  ubuntu-sleeper

4 Docker compose

目的:创建配置文件,运行配置多个容器

4.1 补充知识——容器链接

docker run -d --name=vote -p 5000:80 --link redis:redis voting-app
# ?第一个redis表示容器名,第二个redis表示镜像名

4.2 Docker compose version 1

docker-compose.yml案例

redis:
    image: redis
db:
    image: postgres:9.4
vote:
    image: voting-app
    ports:
        - 5000:80
    links:
        - redis
result:
    image: result-app
    ports:
        -5001:80
    links:
        - db
worker:
    image: worker
    links:
        - redis
        - db

运行docker-compose.yml

docker-compose up

运行该yml文件等效于shell中执行如下指令

docker run -d --name=redis redis
docker run -d --name=db postgres: 9.4
docker run -d --name=vote -p 5000:80 --link redis:redis voting-app
docker run -d --name=result -p 5001:80 --link db:db result-app
docker run -d --name=worker --link db:db --link redis:redis worker

若使用的不是Dokcer Hub上的镜像,可以在yml指示自己创建容器的方式

redis:
    image: redis
db:
    image: postgres:9.4
vote:
    build: ./note # 包括源码与Dockerfile
    ports:
        - 5000:80
    links:
        - redis
result:
    build: ./result
    ports:
        -5001:80
    links:
        - db
worker:
    build: ./worker
    links:
        - redis
        - db

4.3 不同版本的Docker compose

4.3.1 version 1

redis:
    image: redis
db:
    image: postgres: 9.4
vote:
    image : voting-app
    ports:
        一5000:80
    links:
        -redis

4.3.2 version 2

version: 2
services:
    redis:
        image: redis
    db:
        image: postgres: 9.4
    vote:
        image: voting-app
        ports:
            - 5000:80
        depends_ on :
            - redis

4.3.3 version 3

V2不需要links 可以用depends_on指出依赖的容器

version: 3
services:
    redis:
        image: redis
    db:
        image: postgres: 9.4
    vote:
        image: voting-app
        ports:
            - 5000:80

4.3.4 network

version: 2
services:
    redis:
        image: redis
    networks:
        - back-end
db:
    image: postgres:9.4
    networks:
        - back-end
vote:
    image: voting-app
    networks:
        - front-end
        - back-end
result:
    image: result
    networks:
        - front-end
        - back-end
networks:
    front-end:
    back-end:

容器网络图示

4.4 运行docker compose

命令行运行

docker-compose up

4 Docker Engine

4.1 Docker组成

组成作用
Docker DeamOn管理镜像、容器、网络等
REST API与DeamOn交互的接口
Docker CLI输入命令

Docker engine 的层级结构:



Docker engine 交互逻辑:



Docker engine 命名空间:


4.2 限制容器使用系统资源

docker run --cpus=.5 --memory=100m ubuntu
# 限制CPU使用率不超过50%, 内存使用不超过100M