[Docker] 基础教程

85 阅读3分钟

Docker是一款开源的应用容器引擎,可以将应用程序和依赖项打包到一个可移植的容器中,快速发布到Linux机器上并实现虚拟化,实现更高效地构建、部署和管理应用程序。从logo理解,鲸鱼就是服务器,集装箱就是容器,而应用程序及依赖项就是货物。

在实际工作中会分别给nginx、数据库、redis、后端项目等都创建单独的镜像文件。

安装

  1. docs.docker.com/engine/inst…
  2. docs.docker.com/engine/inst…

基本用法

管理Docker守护进程

sudo systemctl start docker     #运行Docker守护进程
sudo systemctl stop docker      #停止Docker守护进程
sudo systemctl restart docker   #重启Docker守护进程
sudo systemctl enable docker    #设置Docker开机自启动
sudo systemctl status docker    #查看Docker的运行状态

管理镜像

docker images                  #查看镜像
docker pull <镜像:标签>         #拉取镜像
docker tag <旧:旧> <新:新>      #修改镜像和标签,以便记忆区分
docker rmi -f <镜像:标签>       #强制删除镜像

管理容器

docker ps [-a]                  #查看容器
docker run [选项] <使用镜像>    #启动新容器
  -d                 #让容器在后台运行
  --restart always   #容器始终运行
  --name             #容器名称
  -p                 #端口映射
  -v                 #绑定volume
docker rm -f <容器>              #强制删除容器
docker logs -f <容器>            #实时查看容器运行日志
docker exec -it <容器> [bash|sh]         #进入容器
docker commit <容器> <仓库>:<标签>        #把容器做成镜像

登录认证

docker login [-u 用户名 -p 密码] 私有仓库           #登录认证
cat /root/.docker/config.json                    #查看账号密码
echo '<账号密码的base64编码>' | base64 --decode    #解密                                         
docker logout 私有仓库                            #移除认证

日志清理(/var/lib/docker)

docker system prune
docker volume prune
注意:如果数据很重要,那就手动清理

通过Dockerfile构建镜像

FROM node:14.18.2 as buildMode

ENV PROJECT_PATH=/test-project

WORKDIR ${PROJECT_PATH}

COPY . ${PROJECT_PATH}

RUN npm i
RUN npm run build

FROM nginx:1.25.1

# nginx.server.root
ENV PROJECT_PATH=/test-project

RUN mkdir ${PROJECT_PATH}

COPY --from=buildMode ${PROJECT_PATH}/build ${PROJECT_PATH}
COPY --from=buildMode ${PROJECT_PATH}/nginx.conf /etc/nginx/nginx.conf

EXPOSE 80

docker build -t <镜像名称>:<镜像版本> . --no-cache

注意:.表示Dockerfile文件的路径,不能忽略。

docker-compose

docker-compose是Docker官方提供的用于定义和运行多个Docker容器的开源容器编排工具,可以使用YAML文件来配置应用程序需要的所有服务,然后使用docker-compose运行命令解析YAML文件配置,创建并启动配置文件中的所有Docker服务,具有运维成本低、部署效率高等优势。

services:
  web:
    build:
      context: . # 当前目录
      dockerfile: Dockerfile # 查找名叫Dockerfile的文件作为Dockerfile
    container_name: web # 容器名称
    ports: # 映射端口
      - 8080:80

  db: # 服务名称
    image: mysql:5.7 # 基础镜像
    container_name: db # 容器名称
    restart: always # docker启动,当前容器必启动
    ports: # 映射端口
      - 3306:3306
    environment: # 环境变量
      MYSQL_DATABASE: test
      MYSQL_USER: test
      MYSQL_PASSWORD: 123456
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes: # 数据卷挂载路径
      - ./data:/var/lib/mysql
      - ./log:/var/log/mysql/error.log

docker-compose up -d

docker-compose down

推送镜像到dockerhub

1.首先在dockerhub创建账号,并创建存储库(xfqdocker/hello-world)

2.然后将要推送的镜像通过docker tag改名为xfqdocker/hello-world:tagname

3.最后执行docker push xfqdocker/hello-world:tagname即可

.dockerignore

构建镜像时要忽略的内容

node_modules
build
dist
README.md
.gitignore

网络模式

bridge:桥接模式,是容器的默认网络模式,挂靠在docker0网卡上,可以访问外网

host:容器和宿主机的网络实现共享,不安全

none:没有网络,只有本地回环地址127.0.0.1

当然也是可以自定义网络的。

ip address

docker network ls

最后

有问题欢迎指出,会进行更正。