Docker 基础使用命令

1.1 Docker服务相关命令

  • 启动dockers服务:
    systemctl start docker
  • 停止dockers服务:
    systemctl stop docker
  • 重启dockers服务:
    systemctl restart docker
  • 查看dockers服务状态:
    systemctl status docker
  • 设置开机启动docker服务:
    systemctl enable docker

1.2镜像相关命令

1.2.1 查看镜像

docker images

1.2.2 搜索镜像

docker search {{image-name}}

1.2.3 拉取镜像

docker pull {{image-name}}

1.2.4 查看镜像official版本并下载

bing search hub.docker.com search 对应的image-name 找到对应的 version

执行: docker pull {{image-name:version}}

1.2.3 删除镜像

docker rmi {{这里可以是ImageID 也可以是 Image-Name:version}}
因为在docker中,一个相同的镜像虽然版本不同,但是他们的ImageId可能是相同的

删除全部镜像 docker rmi 'docker images -q'
这条指令中的'docker images -q'会把所有ImageId查询出来并当成参数给 docker rmi 执行

1.3 容器相关命令

1.3.1 新建+启动 容器命令

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS说明(常用):有些是一个减号,有些是两个减号

--name="容器新名字" : 为容器指定一个名称;

-d : 后台运行容器并返回容器ID,也即启动守护式容器(后台运行);

-i :以交互模式运行容器,通常与 -t 同时使用;

-t :为容器重新分配一个伪输入终端,通常与 -i 同时使用;

也即启动交互式容器(前台有伪终端,等待交互);

-P : 随机端口映射,大写P

-p : 指定端口映射,小写p

docker run -it centos /bin/bash
参数说明:

-i: 交互式操作。

-t: 终端。

centos : centos 镜像。

/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

要退出终端,直接输入 exit:

1.3.2 列出当前所有正在运行的容器

docker ps [OPTIONS]

OPTIONS说明(常用):
-a :列出当前所有正在运行的容器+历史上运行过的
-l :显示最近创建的容器。
-n:显示最近n个创建的容器。
-q :静默模式,只显示容器编号。

1.3.2 退出容器

  1. exit退出
    run进去容器,exit退出,容器停止

  2. ctrl+p+q
    run进去容器,ctrl+p+q退出,容器不停止

1.3.3 启动已停止运行的容器

docker start 容器ID或者容器名

1.3.4 重启容器

docker restart 容器ID或者容器名

1.3.5 停止容器

docker stop 容器ID或者容器名

1.3.6 强制停止容器

docker kill 容器ID或容器名

1.3.7 删除已停止的容器

docker rm 容器ID

一次性删除多个容器实例

docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm

1.4 数据卷

1.4.1 启动时配置数据卷

  • 创建容器时,使用-v参数来设置数据卷
    docker run ... -v 宿主机目录(文件): 容器内目录(文件)
  1. 目录必须时绝对路径
  2. 如果目录不存在,会自动创建
  3. 可以挂载多个数据卷

1.4.2 数据卷容器

1.5 docker应用部署

1.5.1 mysql的部署

docker run -id -p 3307:3306 --name my_mysql \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs -v \
$PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql
  • -p 3307:3306 : 将容器的 3306 端口映射到宿主机的 3307 端口。
  • -v $PWD/conf:/etc/mysql/conf.d : 将主机当前目录下的 conf/my.cnf 挂载到容器的/etc/mysqI/my.cnf。配置目录
  • -v $PWD/logs:/logs : 将主机当前目录下的logs 目录挂载到容器的 /ogs。日志目录
  • -v $PWD/data:/var/lib/mysql : 将主机当前目录下的data目录挂载到容器的 ar/lib/mysql。数据目录
  • -e MYSQL ROOT PASSWORD=123456 : 初始化root 用户的密码

$PWD 就是Linux中获取当前目录的,没有特殊含义

1.5.2 Tomcat的部署

docker dun -id --name my_tomcat \
-p 8080:8080 \
-v $PWD:/uer/local/tomcat/webapps \
tomcat

参数参考 1.5.1 mysql的部署

1.5.3 Nginx的部署

docker run -id --name my_nginx \
-p 80:80 \
-v $PWD/conf/ngiix.conf:/ect/nginx/nginx.conf \
-v $PWD/logs:/var/log/nginx \
-v $PWD/html:/usr/share/nginx/html \
nginx

参数参考 1.5.1 mysql的部署,注意nginx.conf文件需要自己配置

1.5.4 Redis的部署

docker run -id --name my_redis -p 6379:6379 redis

外部机器连接redis
./redis-cli.exe -h localhost -p 6379

1.6 Dockerfile

1.6.1 Docker原理

  • 操作系统组成部分:
    • 进程调度子系统
    • 进程通信子系统
    • 内存管理子系统
    • 设备管理子系统
    • 文件管理子系统
    • 网络通信子系统
    • 作业控制子系统

Linux文件系统由bootfs和rootfs两部分组成

  • bootfs: 包含bootloader (引导加载程序)和kernel (内核)
  • rootfs: root文件系统,包含的就是典型Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件
  • 不同的linux发行版,bootfs基本一样,而rootfs不同,如ubuntu
    centos等

解释原理:

  • Docker镜像是由特殊的文件系统叠加而成
  • 最底端是bootfs,并使用宿主机的bootfs
  • 第二层是root文件系统rootfs称为baseimage
  • 然后再往上可以叠加其他的镜像文件
  • 统一文件系统(Union File System)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统
  • 一个镜像可以放在另一个镜像的上面。位于下面的镜像称为父镜像,最底部的镜像成为基础镜像
  • 当从一个镜像启动容器时,Docker会在最顶层加载一个读写文件系统作为容器

1.6.2 镜像制作

  • 手动制作
docker commit 容器id 镜像名称:版本号
docker save -o 压缩文件名称 镜像名称:版号
docker load -i 缩文件名称
  • dockerfile 自动制作
FROM 指定父镜像
MAINTAINER 作者信息
LABEL 标签
RUN 执行命令
CMD 容器启动命
ENTRYPOINT 入口
COPY 复制文件
ADD 添加文件
ENV 环境变量
ARG 构建参数
VOLUME 定义外部可以挂载的数据卷
EXPOSE 暴露端口
WORKDIR 工作目录
USER 指定执行用
HEALTHCHECK 健康检查
ONBUILD 触发器
STOPSIGNAL 发送信号量到宿主机
SHELL 指定执行脚本的shell

1.6.2 Docker 发布springboot项目

FROM java:8
ADD springboot-hello-1.0.jar app.jar
CMD java -jar app.jar

1.7 Docker Compose

1.7.1 创建docker-compose.yml 文件

就拿docker hub中wordpress的docker-compose.yml举例

version: '3.1'

services:

  wordpress:
    image: wordpress
    restart: always
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: exampleuser
      WORDPRESS_DB_PASSWORD: examplepass
      WORDPRESS_DB_NAME: exampledb
    volumes:
      - $PWD/wordpress:/var/www/html

  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_DATABASE: exampledb
      MYSQL_USER: exampleuser
      MYSQL_PASSWORD: examplepass
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      - $PWD/db:/var/lib/mysql

volumes:
  wordpress:
  db:

1.7.2 运行docker-compose.yml 文件

docker-compose up

若运行失败报没有指定project name 时就运行docker-compose -p 自定义项目名 up

1.8 Docker 私有仓库

  • 所谓的私有仓库就是一个镜像,所以我们创建私有仓库首先要拉去私有仓库镜像

1.8.1 Docker 创建仓库

# 1、拉取私有仓库镜像
docker pul1 registry
# 2、启动私有仓库容器
docker run -id --name=registry -p 5000:5000 registry
# 3、打开浏览器 输入地址nttp://私有仓库服务器ip:5000/v2/_catalog,看到{"repositories":[]} 表示私有仓库 搭建成功
# 4、修改daemon.json
vim /etc/docker /daemon.json
#在上述文件中添加一个key,保存退出。此步用于让 docker 信任私有仓库地址;注意将私有仓库服务器ip修改为自
己私有仓库服务器真实ip
{"insecure-registries":["私有仓库服务器ip:5000"]}
# 5、重启docker 服务
systemctI restart docker
docker start registry

1.8.2 Docker 上传仓库

# 1、标记镜像为私有仓库的镜像
docker tag centos:7 私有仓库服务器IP:5000/centos:7
# 2、上传标记的镜像
docker push 私有仓库服务器IP:5000/centos:7

1.8.3 Docker 拉取私有仓库镜像

docker pull 私有仓库服务器IP:5000/centos
posted @ 2023-10-15 20:34  Cold的窝  阅读(9)  评论(0)    收藏  举报