文章目录
docker安装
查看docker安装情况
rpm -q docker
安装docker依赖
yum install -y yum-utils
设置 仓库镜像地址
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
下载docker相关引擎
yum makecache fase
查看docker所有版本
yum list docker-ce --showduplicates | sort -r
安装docker指定版本
yum install -y docker-ce-18.06.0.ce
设置阿里云镜像加速器
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://eoxkfqyz.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
docker基本命令
docker相关命令
#启动docker
systemctl start dokcer
#查看docker状态
systemctl status docker
#停止docker
systemctl stop docker
#docker开机自启
systemctl enable docker
# 批量停止容器
docker stop $(docker ps -a -q)
# 批量删除容器
docker rm $(docker ps -a -q)
# 删除none镜像
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
# 删除全部镜像
docker rmi -f $(docker images -q)
镜像相关命令
镜像是一个只读的文件,能够被docker运行起来的程序
#搜索镜像
docker search 镜像名
#查看所有镜像
docker images / image list
#拉取镜像
docker pull 仓库名/镜像名
docker pull 镜像名:版本
#删除镜像
docker image rmi 镜像名或镜像id
#删除没有使用的镜像
docker image prune -a
#镜像重命名
docker tag 旧镜像名:旧版本号 新镜像名:新版本号
#导出镜像
docker save -o 保存文件名 镜像名
#导入镜像
docker load -i 文件名
容器相关命令
容器就类似于我们运行起来的一个操作系统,而且这个操作系统启动了某些服务。 这里的容器指的是运行起来的一个Docker镜像。
#查看所有容器
docker container ls --all
docker ps -a
#查看正在运行的容器
docker ps
#启动容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
#运行centos7
docker run -it --name=mycentos centos:centos7 /bin/bash
#守护进程方式运行centos7
docker run -itd --name=mycentos centos:centos7 /bin/bash
#将容器连接网络
docker run -it --name=mycentos --network=host centos:centos7 /bin/bash
#容器映射端口
docker run -it --name=mycentos --network=host -p 5000:5000 centos:centos7 /bin/bash
#查看容器内部情况
docker inspect 容器名或容器id
#查看容器运行日志
docker logs 容器名或容器id
#进入容器内部交互环境
docker exec -it 容器名或容器id /bin/bash
#开启容器
docker start 容器名或容器id
#停止容器
docker stop 容器名或容器id
#删除容器(容器必须停止才能删除)
docker rm 容器名或容器id
# 批量关闭/删除容器
docker stop/rm $(docker ps -a -q)
#容器制作成镜像
docker commit 容器名或容器id 镜像名
#将本地文件或文件夹复制到容器内
docker cp 本地文件路径 容器id:容器路径
## 进入容器后ip not found
yum -y install initscripts
docker run 参数:
参 数 | 操作 |
---|---|
-i | 以交互模式运行容器 |
-t | 容器启动后会进入命令行 |
-it | 分配一个伪终端 |
- -name | 给容器命名 |
-v | 目录映射 |
-d | 守护方式在后台运行容器 |
-p | 端口指定映射 |
-P | 端口随机映射 |
- -network | host:表示把主机的网络环境映射到容器 ;bridge:为每一个容器分配、设置IP等,并将容器连接到docker0的虚拟网桥;none:容器有自己独立的Network namespace,但是没有进行任何的相关配置 |
–network使用
#查看可支持的network
docker network ls
#创建network, 默认为bridge模式。
docker network create network名
#删除network
docker network rm network名
私有仓库部署
下载registry镜像
docker pull registry
启动仓库容器
docker run -d -p 5000:5000
仓库配置
vim /etc/docker/daemon.json
{"registry-mirrors":
["http://74f21445.m.daocloud.io"], "insecure-registries": ["192.168.153.20: 5000"]}
#重启
systemctl daemon-reload
systemctl restart docker
私有容器提交和拉取
#启动容器
docker start registry容器id
#标记容器
docker tag centos 192.168.153.20/mycentos
#提交容器
docker push 192.168.153.20/mycentos
#拉取镜像
docker pull 192.168.153.20/mycentos
Dockerfile
docker官网
Dockerfile类似于我们学习过的脚本,将我们在上面学到的docker镜像,使用自动化的方式实现出来。
Dockerfile的作用
1、找一个镜像: centos
2、创建一个容器: docker run centos
3、进入容器: docker exec -it 容器 命令
4、操作: 各种应用配置
5、构造新镜像: docker commit Dockerfile
使用准则
1、大: 首字母必须大写D
2、空: 尽量将Dockerfile放在空目录中。
3、单: 每个容器尽量只有一个功能。
4、少: 执行的命令越少越好。
构建镜像命令格式
docker build -t [镜像名]:[版本号] [Dockerfile所在目录]
docker build -t centos:v01 Dockerfile
Dockerfile文件构造
# 构建一个基于centos镜像
FROM centos:centos7
# 镜像作者
MAINTAINER xxx
# 执行命令
# 将本地指定文件复制到容器指定目录下
# ADD 本地目录文件地址 容器文件地址
# 执行命令
RUN yum install -y wget
# 对外端口
EXPOSE 8000
#环境变量设置
#ENV <key> <value>
# 启动 ssh
COMMAND ["systemctl","status","network"]
Dockerfile命令详解
指令 | 功能 |
---|---|
FROM | 构建一个新的基础镜像 |
RUN | 运行指定的命令 (yum install, ls , mkdir) |
COPY | 复制主机文件或文件夹到容器内 ,但是是不会自动解压文件,也不能访问网络资源,(推荐使用) |
ADD | 与COPY功能类似,但ADD也支持使用url指定的资源为源文件 |
EXPOSE | 生成容器时期望的暴露端口,实际取决于docker run -p |
CMD | 默认运行的程序 |
WORKDIR | 切换目录 |
ENV | 以键值格式设置环境变量 |
ENTRYPOINT | 与CMD类似, |
VOKUME | 指定基于新镜像运行容器时作为映射目录 |
注:
1、CMD不同于RUN,CMD用于指定在容器启动时所要执行的命令,而RUN用于指定镜像构建时所要执行的命令。
2、ENTRYPOINT与CMD非常类似,不同的是通过docker run执行的命令不会覆盖ENTRYPOINT,而docker run命令中指定的任何参数,都会被当做参数再次传递给CMD。Dockerfile中只允许有一个ENTRYPOINT命令,多指定时会覆盖前面的设置, 而只执行最后的ENTRYPOINT指令。 通常情况下, ENTRYPOINT 与CMD一起使用,ENTRYPOINT 写默认命令,当需要参数时候 使用CMD传参。
entrypoint | cmd | command | args | 结果 |
---|---|---|---|---|
exec | cmd | exec cmd | ||
exec1 | cmd1 | exec2 | cmd2 | exec2 cmd2 |
exec1 | cmd1 | cmd2 | exec1 cmd2 | |
exec1 | cmd1 | exec2 | exec2 cmd1 |
docker-compose
Docker Compose是一个docker编排工具。一个Docker容器的应用,通常由多个容器组成。使用Docker Compose不再需要使用shell脚本来启动容器。
docker-compose安装
curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#修改权限
chmod +x /usr/local/bin/docker-compose
#查看版本
docker-compose --version
#高版本
curl -SL \
https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-linux-x86_64 \
-o /usr/local/bin/docker-compose
#pip安装
pip3 install docker-compose==1.16.1 -i https://pypi.douban.com/simple
docker-compose文件详解
version: '3.1' #指定 docker-compose.yml 文件的写法格式
services: #多个容器集合
py:
build: ../ #使用Dockerfile构建映像
container_name: my-py #容器名
ports:
- "5000:5000"
expose: #暴露端口,但不映射到宿主机,只被连接的服务访问
- "8081"
redis:
image: redis:alpine #指定服务所使用的镜像
volumes:#目录映射
- /home/time/data:/data
restart: unless-stopped
privileged: true
logging: #日志服务
driver: "json-file" #默认json-file,可选syslog
options:
max-size: "10m"
web:
image: mytest:v1.0.0
command: sh -c 'cd /data && ls' #容器启动后默认执行的命令
volumes:
- .:/web
- /data:/data
- /home/time/data:/data
depends_on: #规定service加载顺序,例如web需要在redis运行前运行
- redis
restart: unless-stopped #no是默认的重启策略,在任何情况下都不会重启容器。 指定为always时,容器总是重新启动
privileged: true
logging:
driver: "json-file"
options:
max-size: "10m"
networks:
default:
driver: default
config:
- subnet: 10.254.{{net_id}}.0/24
docker-compose命令
#相当于 build + start :构建容器并启动容器整个project的所有service
docker-compose up -d
问题
# cgroups: cannot find cgroup mount destination: unknown.
sudo mkdir /sys/fs/cgroup/systemd
sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd/
mysql arm64版本
docker pull --platform linux/amd64 mysql:5.7.30