Skip to content

linux 下安装docker

配置国内镜像源

// Docker 官方提供的国内镜像源: registry.docker-cn.com
// /etc/docker/daemon.json 如果此文件不存在

touch daemon.json
cd /etc/docker
vim daemon.json

{
    "registry-mirrors": [
        "https://registry.docker-cn.com"
    ]
}

// 修改完配置后,重启docker

systemctl restart docker

操作镜像

  • 查看镜像
// IMAGE ID 镜像ID  8b6c5f52aa82  只显示了前12位字符,其实是64位的字符
docker images
  • 拉取镜像
// xxx镜像名称,也可以加版本号 xxx:1.2.3
docker pull xxx
  • 查看镜像
// 拉取镜像后,镜像就存放到本地了,可以使用命令查看
docker images
  • 删除镜像
// xxx 镜像的名称或ID
docker rmi xxx

操作容器

// 创建容器  通过--name配置容器名称
docker create --name consul  consul

// 启动容器
docker start consul

// 列出正在运行中的容器列表
docker ps

// 列出所有状态的容器列表
docker ps -a 

// 停止容器
docker stop consul

// 删除容器 (正在运行的容器是不能删除的,所以先停止容器再进行删除)
docker rm consul

docker网络

// 1.docker 网络的组成 沙盒 网络 端点
// 2.docker 容器之间的网络打通是通过 --link 和expose端口暴露实现
// 3.docker 容器与宿主机之间的网络打通是根据端口映射实现
// 关于docker的网络知识 之前只是粗略了解端口映射 通过这节 了解了更多 感谢

管理和存储数据

// 沙盒文件系统跟随容器生命周期所创建和移除的,数据以及文件无法直接被持久化存储。
// 由于容器隔离,我们很难从容器外部获得或操作容器内部文件中的数据。

// Docker 容器文件系统UnionFS 支持挂载不同类型的文件系统到统一的目录结构中,所以我们只需要将宿主操作系统中,文件系统里的文件或目录挂载到容器中,便能够让容器内外共享这个文件。

挂载方式

 -v 或--volume

 -v <host-path>:<container-path> 
 host-path: 宿主机文件目录
 container-path  容器内文件目录
docker run -d \
--name mysql-1 \
-p 4006:3306 \
-v /usr/local/docker/mysql/config/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf \
-v /usr/local/docker/mysql/data/mysql:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=sunlight2021 \
mysql

-v /usr/local/docker/mysql/config/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf: 将容器中 /etc/mysql/mysql.conf.d/mysqld.cnf 配置文件挂载到宿主机的 /usr/local/docker/mysql/config/mysqld.cnf 文件上;
-v /usr/local/docker/mysql/data:/var/lib/mysql: 将容器中 /var/lib/mysql 数据目录挂载到宿主机的 /usr/local/docker/mysql/data 目录下;

Docker 还支持以只读的方式挂载,这样容器中的程序是不能修改这个目录的文件的,在-v后的命令后再加上:ro

 -v <host-path>:<container-path>:ro
  • 挂载临时文件目录

它主要是通过内存来存储数据。可以通过 --tmpfs 挂在临时目录到容器,由于内存的具体位置不需要我们来指定,这个选项里我们只需要传递挂载到容器内的目录即可。

docker run -d --name webapp --tmpfs /usr/local/sunlight mysql

我们的部署文件,前端打包文件或者后端微服务文件可以通过挂载的方式,这样不用每次都重新创建容器

  • 使用数据卷进行挂载

我们不需要知道数据具体存储在了宿主操作系统的何处,只需要给定容器中的哪个目录会被挂载即可。

docker run -d --name webapp -v /usr/local/sunlight mysql

我们也可以通过 -v name:container-path 这种形式来命名数据卷。 name便是给数据卷起别名

数据卷可以用于在多个容器(可在多个物理机上)共享数据

将容器保存为镜像

// 先查看所有的容器
docker ps -a

// xxx container-id  或者 names
docker commit xxx

docker commit -m 'message'  xxx

// 便可以看到上面提交的镜像
docker images

// 通过Images Id为镜像取名字
docker tag 4441940323ea consul-1:1.0.1

// 还可以对已有镜像创建新的命名(相当于生成了一个新的容器)
docker tag webapp:1.0 webapp:latest

镜像迁移

// 先将镜像保存位tar格式
docker save consul-1>/usr/local/aehyok/consul-1.tar

// 然后可以拷贝到其他远程服务器上

// 拷贝完毕后,导入镜像文件 == 执行完毕,镜像则导入成功
docker load < /usr/local/aehyok/consul-1.tar

// 通过命令查看生成的镜像
docker images

镜像迁移另外一种方式

// 将容器的commit和save 通过export 合并成一条指令
docker export -o /usr/local/aehyok/consul-2.tar sul

// 然后可以拷贝到其他远程服务器上

// 将镜像导入(还可以给镜像命名)
docker import /usr/local/aehyok/consul-2.tar consul-2:1.0.1

// 通过命令查看生成的镜像
docker images

DockerFile 构建镜像

// 通过 \ 合并命令
// 行尾添加 \ 的命令换行方式,以及行首 # 进行注释的格式

mkdir mynginx
cd mynginx
touch Dockerfile
// 编写Dockerfile文件
//......

// imageName 给生成的镜像取名字 以及打上tag  dir便是Dockerfile所在的路径
docker build -t imageName: tagName dir

// 给镜像取admin的名字   dir为. 表示当前目录
docker build -t admin .


FROM 
// 指定一个基础镜像  (可以合并两个镜像)
// 一个Dockerfile中可以存在多个FROM
// 当 FROM 第二次或者之后出现时,表示在此刻构建时,要将当前指出镜像的内容合并到此刻构建镜像的内容里。
FROM nginx:latest
FROM nginx
FROM nginx:1.22.1

RUN 用于向控制台发送命令的指令
// RUN 支持通过 \ 换行,对单行太长的指令 建议切割 

COPY
// 将当前目录中的package.json 拷贝到容器 /usr/src/app 目录下
COPY package.json /usr/src/app/
// COPY 也支持通配符 https://golang.org/pkg/path/filepath/#Match
// *
COPY hom* /usr/src/app/
// ?
COPY hom?.txt /usr/src/app/


ADD 
// 跟COPY类似
// ADD 能够支持使用网络端的 URL 地址作为 src 源,并且在源文件被识别为压缩包时,自动进行解压,而 COPY 没有这两个能力



ENV
// 设置环境变量
ENV DATA 8
ENV VERSION 8.0.53
// 环境变量便可以在下面使用
RUN  .......$VERSION ......


ARG
// 构建命令的参数变量
ARG DATA
ARG VERSION

docker build --build-arg DATA=pro  --build-arg VERSION= 1.1.1 .........


ENTRYPOINT

docker compose

ubuntu 安装docker-compose

apt install docker-compose

// 启用容器  docker-compose 命令默认会识别当前控制台所在目录内的 docker-compose.yml 文件
docker-compose up
// -d代表容器后台运行
docker-compose up -d
// 通过 -p 选项来定义项目名
docker-compose -p myapp up -d
// 指定yml配置文件
docker-compose -f ./compose/docker-compose.yml

// 日志
docker-compose logs xxx


docker-compose create  xx 对应   docker create  xx
docker-compose start   xx 对应  docker start xx
docker-compose stop xx 对应  docker  stop xx