docker基础使用笔记

这里写自定义目录标题

  • docker 安装(ubuntu系统)
  • 配置docker的镜像地址
    • docker的镜像配置
  • docker的常用命令
    • docker 镜像的常用命令
    • docker容器的常用命令
  • 名词解释
    • 镜像和容器
    • 虚悬镜像
    • 中间层镜像
  • Dockerfile
    • 创建Dockerfile文件
    • Dockerfile的上下文
    • Dockerfile的构建命令
  • docker-compose的使用
    • 安装docker-compose
    • docker-compose.yml文件介绍
    • docker-compose的常用命令
    • 常用的docker-compose文件
  • docker命令速查表

docker 安装(ubuntu系统)

# 更新数据源
apt-get update
# 安装所需依赖
apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# 安装 GPG 证书
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# 新增数据源
add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# 更新并安装 Docker CE
apt-get update && apt-get install -y docker-ce
# 查看docker 安装的相关信息
docker version

配置docker的镜像地址

官方中国区镜像地址:https://registry.docker-cn.com
阿里云镜像地址:https://902jf69q.mirror.aliyuncs.com/
注:可以在阿里云官网搜索自己的镜像地址。

docker的镜像配置

tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxxxxxx.mirror.aliyuncs.com"]
}
EOF
# 重启 Docker
systemctl daemon-reload
systemctl restart docker
# 查看docker的安装信息
docker info

docker的常用命令

docker 镜像的常用命令

# 拉取镜像 其中除了软件名称意外其余都可以省略,参数可以通过docker pull --help 获取
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]

# 查看都下载了那些镜像 如果镜像过多,可以通过在ls后面添加参数的方式来获取指定的镜像
docker image ls
# 查看nginx相关的镜像
docker image nginx
# 可以通过--format选项来查看指定的内容
docker image ls --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"

# 查看docker容器中镜像、容器、数据卷所占用的空间。
docker system df

# 删除镜像 镜像名称,镜像id都可以作为删除镜像的条件
docker image rm [选项] <镜像1> [<镜像2> ...]

docker容器的常用命令

# 查看docker中运行的容器
docker ps

# 运行一个docker容器
# -p 指定启动容器的端口号 
# 前面的8080是宿主机端口:供外部(docker意外的程序)访问的端口。
# 后面的8080是容器端口:tomcat启动的端口,docker内部使用的端口。
# -d 指定启动方式,-d表示后台启动,不写表示前台启动,后台启动后得到容器的id
docker run -p 8080:8080 -d tomcat

# 运行容器 
# run是docker启动容器的命令, 特点是如果本地存在,那么直接运行,如果不存在,则从镜像地址拉去一个相关的镜像,并运行
# ubuntu:15.10 镜像的名称:镜像版本
# /bin/echo "Hello world" 在容器内部要运行的命令
docker run ubuntu:15.10 /bin/echo "Hello world"

# 可以通过参数来进入运行的容器内部,可以使用exit命令来推出容器
# -t: 在新容器内指定一个伪终端或终端。
# -i: 允许你对容器内的标准输入 (STDIN) 进行交互。
docker run -i -t ubuntu:15.10 /bin/bash

# 停止容器 一般会先运行docker ps 来查看对应的容器id和名称
docker stop [容器id/容器名称]

# 停止的容器恢复运行状态
docker restart [容器id/容器名称] 
# 查看所有的容器,包括已经停止的
docker ps -a

# 删除容器 提示:无法删除正在运行的容器
# 如果需要停止正在运行的容器,需要加上-f参数
docker rm [容器id/容器名称] 
# 不建议经常使用
docker rm -f [容器id/容器名称] 

# 交互式进入容器,修改容器配置
# docker exec 进入正在运行的容器
# -it 表示使用linux提示符的方式操作容器
# 69d1 对应的容器id
# bash 表示进去容器中的位置
# 使用 ctrl+d退出容器,获取使用exit命令
docker exec -it 69d1 /bin/bash

名词解释

镜像和容器

以面向对象的方式来解释,就是类就是镜像,实例化的对象就是容器

虚悬镜像

由于拉去了新的镜像,旧的镜像名称和原有的镜像名称重复,因此,不在显示旧的镜像名称,统一使用来显示旧的镜像名称。
需要镜像都是无用的镜像,可以删除

# 查看需要镜像的命令
docker image ls -f dangling=true

# 删除虚悬镜像
docker image prune

# 虚悬镜像的显示方式(不是命令,不能运行)
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
<none>              <none>              00285df0df87        5 days ago          342 MB

中间层镜像

镜像可能会依赖一些底层镜像,这些镜像就是中间层镜像,如果删除,会导致顶层镜像不好用,不能随意删除。
中间层镜像的名称也是,不要误当做是虚悬镜像删除

# 查看中间层镜像
docker image ls -a

Dockerfile

构建自己项目的镜像,以一个tomcat项目作为示例

创建Dockerfile文件

  1. 创建Dockerfile文件 vi Dockerfile
    或者nano Dockerfile
  2. Dockerfile文件内容
FROM tomcat:latest

COPY index.jsp /usr/local/tomcat/webapps/ROOT

关于Dockerfile文件的内容的解释
第一行FORM tomcat:latest:表示该镜像继承tomcat镜像,
第二行:表示操作,将indexl.jsp文件复制到指定的目录下

  1. 使用docker build -t myshop .命令打包镜像

参数说明:
build:docker的打包命令
-t myshop:指定打包的镜像名称和target
.(点) :表示当前目录有两层含义,一是表示Dockerfile的路径,二是表示Dockerfile的上下文目录并打包(参考下一个标题)

  1. 使用docker images查看镜像是否存在
  2. docker run -p 8080:8080 --name myshop -d myshop
    运行myshop镜像

Dockerfile的上下文

docker build -t myshop .命令中最后的.表示的是Dockerfile文件的路径,也是打包的文件所在的路径,需要特殊说明的地方在于,docker的打包过程是将.所在的目录打包到docker服务器之后再开始构建,就是说,如果在Dockerfile中操作了不属于.目录下的文件,那么在构建镜像的时候就会报错。。

Dockerfile的构建命令

COPY: 复制文件到指定目录

docker-compose的使用

安装docker-compose

# 安装docker
curl -L https://github.com/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# 安装完成后的项目需要做一次授权才能使用
chmod +x /usr/local/bin/docker-compose

也可以手动安装

在github中下载docker-compose文件后,上传到服务器后,移动到/usr/local/bin目录下,并改名为docker-compose就可以了,但是一样也需要授权 chmod +x /usr/local/bin/docker-compose

docker-compose.yml文件介绍

通常在/usr/local的目录下按装镜像

  1. 创建一个镜像同名的文件夹,如果需要多个版本的,则加上版本号mkdir 文件夹
  2. 创建docker-compose.yml文件,只能是这个名称
  3. 在docker-compose文件中编写镜像安装的逻辑
version: '3'
services:
  web:
    build: .
    ports:
     - "5000:5000"
  redis:
    image: "redis:alpine"

上面是docker-compose文件的示例文件,出了version和services之外其余的都是根据镜像的参数定制的,每个docker-compose文件可以安装和启动管理多个镜像。
yml文件编写的注意事项

  1. 大小写敏感
  2. 使用缩进表示层级关系
  3. 缩进时不允许使用 TAB 键,只允许使用空格。
  4. 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

docker-compose的常用命令

# 启动(后台启动)
docker-compose up -d

# 关闭容器
docker-compose down

常用的docker-compose文件

# tomcat安装部署
# TZ属性表示时区
# volumes 是将容器中的文件夹映射到本地,这个更方便部署
version: '3.1'
services:
  tomcat:
    restart: always
    image: tomcat
    container_name: tomcat
    ports:
      - 8080:8080
    volumes:
      - ./webapps:/usr/local/tomcat/webapps
    environment:
      TZ: Asia/Shanghai
# mysql的安装部署
# volumes是为了mysql数据的持久话,防止容器关闭后数据丢失
version: '3.1'
services:
  db:
    # 目前 latest 版本为 MySQL8.x
    image: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
    ports:
      - 3306:3306
    volumes:
      - ./data:/var/lib/mysql

docker命令速查表

# 查看 Docker 版本
docker version
# 从 Docker 文件构建 Docker 映像
docker build -t image-name docker-file-location
# 运行 Docker 映像
docker run -d image-name
# 查看可用的 Docker 映像
docker images
# 查看最近的运行容器
docker ps -l
# 查看所有正在运行的容器
docker ps -a
# 停止运行容器
docker stop container_id
# 删除一个镜像
docker rmi image-name
# 删除所有镜像
docker rmi $(docker images -q)
# 强制删除所有镜像
docker rmi -f $(docker images -q)
# 删除所有虚悬镜像
docker rmi $(docker images -q -f dangling=true)
# 删除所有容器
docker rm $(docker ps -a -q)
# 进入 Docker 容器
docker exec -it container-id /bin/bash
# 查看所有数据卷
docker volume ls
# 删除指定数据卷
docker volume rm [volume_name]
# 删除所有未关联的数据卷
docker volume rm $(docker volume ls -qf dangling=true)
# 从主机复制文件到容器
docker cp host_path containerID:container_path
# 从容器复制文件到主机
docker cp containerID:container_path host_path

你可能感兴趣的:(docker)