yum 安装
参考手册 https://docs.docker-cn.com/engine/installation/linux/docker-ce/centos/#prerequisites
sh
# 安装gcc 相关
yum -y install gcc
yum -y install gcc-c++
# 如果有旧版本 则卸载之
yum -y remove docker docker-common docker-selinux docker-engine
# 安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
# 设置镜像仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# yum 生成镜像缓存
yum makecache fast
# 安装docker ce
yum -y install docker-ce
#启动docker
systemctl start docker
# 测试
docker version # 查看版本
docker run hello-world # 运行hello world
# 配置镜像加速
mkdir -p /etc/docker
vim /etc/docker/daemon.json
#阿里云
{
"registry-mirrors": ["https://m38560ti.mirror.aliyuncs.com"]
}
systemctl daemon-reload
systemctl restart docker
卸载
sh
#
systemctl restart docker
yum -y remove docker-ce
rm -rf /var/lib/docker
帮助命令
shell
docker version
docker info
docker --help
镜像命令
shell
#列出本地主机上的镜像
docker images
选项
-a :列出本地所有的镜像(含中间映像层)
-q :只显示镜像ID。
--digests :显示镜像的摘要信息
--no-trunc :显示完整的镜像信息
# 搜索镜像
docker search 某个XXX镜像名字
选项
--no-trunc : 显示完整的镜像描述
-s : 列出收藏数不小于指定值的镜像。
--automated : 只列出 automated build类型的镜像;
# 下载镜像
docker pull 镜像名字[:TAG]
# 删除镜像
docker rmi 某个XXX镜像名字ID
## 删除单个
docker rmi -f 镜像ID
## 删除多个
docker rmi -f 镜像名1:TAG 镜像名2:TAG
## 删除全部
docker rmi -f $(docker images -qa)
容器命令
sh
# 1.新建并启动容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
选项
--name="容器新名字": 为容器指定一个名称;
-d: 后台运行容器,并返回容器ID,也即启动守护式容器;
-i:以交互模式运行容器,通常与 -t 同时使用;
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-P: 随机端口映射;
-p: 指定端口映射,有以下四种格式
ip:hostPort:containerPort
ip::containerPort
hostPort:containerPort
containerPort
# 举类
docker run -it --name="hello world" -p:8080:8081 [宿主机端口:docker容器端口]
#使用镜像centos:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
docker run -it centos /bin/bash
#2.列出当前所有正在运行的容器
docker ps [OPTIONS]
选项
-a :列出当前所有正在运行的容器+历史上运行过的
-l :显示最近创建的容器。
-n:显示最近n个创建的容器。
-q :静默模式,只显示容器编号。
--no-trunc :不截断输出。
#3. 容器退出
exit # 容器停止退出
ctrl+P+Q # 容器不停止退出
#4。 启动容器
docker start 容器ID或者容器名
#5. 重启容器
docker restart 容器ID或者容器名
#6.停止容器
docker stop 容器ID或者容器名
#7.强制停止容器
docker kill 容器ID或者容器名
#8.删除已停止的容器
docker rm 容器ID
#一次性删除多个容器
docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm
#9.启动守护式容器 即在后台运行
docker run -d 容器名
#10.查看容器日志
docker logs -f -t --tail 容器ID
#* -t 是加入时间戳
#* -f 跟随最新的日志打印
#* --tail 数字 显示最后多少条
#11.查看容器内运行的进程
docker top 容器ID
#12.查看容器内部细节
docker inspect 容器ID
#13.进入正在运行的容器并以命令行交互
docker exec -it 容器ID /bin/bash
重新进入docker attach 容器ID
docker attach 容器ID
#attach 直接进入容器启动命令的终端,不会启动新的进程
#exec 是在容器中打开新的终端,并且可以启动新的进程
#14.从容器内拷贝文件到主机上
docker cp 容器ID:容器内路径 目的主机路径
sh
Docker镜像commit操作补充
#docker commit提交容器副本使之成为一个新的镜像
docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要创建的目标镜像名:[标签名]
# docker commit -m=“mytomcat” -a=“dj” 4ff16255e089 mytomcat:10.0.12
容器数据卷
基础命令
sh
#直接命令添加
docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
# 实现容器和宿主机之间数据共享
#命令(带权限)
docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
#################################
# DockerFile添加
# 新建dockerFile 文件
# VOLUME["/dataVolumeContainer","/dataVolumeContainer2","/dataVolumeContainer3"]
## 模板如下
# 基础镜像
FROM centos
# 指定容器数据卷
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
# 执行相关命令
CMD echo "finished,--------success1"
CMD /bin/bash
# end
#docker build 生成镜像
docker build -f dockFile -t dj/test .
主机默认地址在
/var/lib/docker/volumes/镜像ID/_data
#
Docker挂载主机目录Docker访问出现cannot open directory .: Permission denied
解决办法:在挂载目录后多加一个--privileged=true参数即可
#
父子间的继承
命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器
sh
# 继承创建
--volumes-from
# 先创建容器之后再复制
docker run -it --name dc02 --volumes-from dc01 zzyy/centos
结果:
父级 可以查看到子级的文件共享
结论:容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止
DockerFile
1:每条保留字指令都必须为大写字母且后面要跟随至少一个参数
2:指令按照从上到下,顺序执行
3:#表示注释
4:每条指令都会创建一个新的镜像层,并对镜像进行提交
流程:
(1)docker从基础镜像运行一个容器
(2)执行一条指令并对容器作出修改
(3)执行类似docker commit的操作提交一个新的镜像层
(4)docker再基于刚提交的镜像运行一个新容器
(5)执行dockerfile中的下一条指令直到所有指令都执行完成
dockerfile
#基础镜像,当前新镜像是基于哪个镜像的
FROM
#镜像维护者的姓名和邮箱地址
MAINTAINER
#容器构建时需要运行的命令
RUN
#当前容器对外暴露出的端口
EXPOSE
#指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点
WORKDIR
#用来在构建镜像过程中设置环境变量
ENV
#将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
ADD
#类似ADD,拷贝文件和目录到镜像中。
#将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置
COPY
#容器数据卷,用于数据保存和持久化工作
VOLUME
#指定一个容器启动时要运行的命令
#Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换
CMD
#指定一个容器启动时要运行的命令
#ENTRYPOINT 的目的和 CMD 一样,都是在指定容器启动程序及参数
ENTRYPOINT
#当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发
ONBUILD
FROM centos
MAINTAINER zzyy<zzyybs@126.com>
#把宿主机当前上下文的c.txt拷贝到容器/usr/local/路径下
COPY c.txt /usr/local/cincontainer.txt
#把java与tomcat添加到容器中
ADD jdk-8u171-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.8.tar.gz /usr/local/
#安装vim编辑器
RUN yum -y install vim
#设置工作访问时候的WORKDIR路径,登录落脚点
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置java与tomcat环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_171
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.8
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.8
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#容器运行时监听的端口
EXPOSE 8080
#启动时运行tomcat
# ENTRYPOINT ["/usr/local/apache-tomcat-9.0.8/bin/startup.sh" ]
# CMD ["/usr/local/apache-tomcat-9.0.8/bin/catalina.sh","run"]
CMD /usr/local/apache-tomcat-9.0.8/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.8/bin/logs/catalina.out
常用命令
sh
# build images
docker build -t dj/rabbitmq-demo02:1.0 .
docker build -f ./Dockerfile -t dj/rabbitmq-demo .
# 运行并挂载目录
docker run -d --name rabbitmq-demo02 -v /opt/app/dockerContainer/rabbitmq-demo02:/data/javalog/ -p 8080:8080 2a7c5546c86a
# 设置时区 Dockfile
ENV LANG C.UTF-8
ENV LANGUAGE zh_CN.UTF-8
ENV LC_ALL C.UTF-8
ENV TZ Asia/Shanghai
配置docker 远程登录
sh
vim /lib/systemd/system/docker.service
# 修改 ExecStart
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
systemctl daemon-reload
systemctl restart docker
docker 安装redis
sh
docker run -d --name redis-dj -p 25110:6379 7faaec683238
docker 安装rabbitmq
sh
docker run -d --name rabbit-dj -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 10086:15672 -p 10010:5672 8b4241a5d928
docker 安装 mysql
sh
docker run -itd --name mysql-slave -p 3310:3306 -e MYSQL_ROOT_PASSWORD=root mysql
docker-compose
sh
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version
国内 curl -L https://get.daocloud.io/docker/compose/releases/download/v2.5.1/docker-compose-`uname -s-
uname -m` > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose 离线安装 mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose https://www.cnblogs.com/yyee/p/12905165.html
导入导出
bash
docker save -o 压缩包名称.tar 镜像名称:tag
docker load -i ./eureka.tar
打镜像
bash
docker tag localhost/eureka:latest localhost/eureka:1.0
复制容器内部文件
bash
## 复制到本地
docker cp CONTAINER ID:容器目录 本地目录
docker ps -a #查看本地容器ID
docker cp storage:/etc/nginx/conf/nginx.conf /home/docker/nginx.conf
Ubuntu安装docker
sh
https://blog.csdn.net/u012563853/article/details/125295985
docker registry docker-compose 安装
yml
version: '3'
services:
registry:
image: registry:2
container_name: registry-center
ports:
- "5000:5000"
volumes:
- ./registry:/var/lib/docker/registry
sh
## 准备好本地的docker image
##
docker tag openjdk:8 192.168.229.128:5000/openjdk:8
vim /etc/docker/daemon.json
## 增加配置项
"insecure-registries" : ["192.168.229.128:5000"]
## 重启
systemctl daemon-reload
systemctl restart docker
## push 镜像
docker push 192.168.229.128:5000/openjdk:8
## 拉取镜像到本地
docker pull 192.168.229.128:5000/openjdk:8
docker 远程连接
sh
vi /etc/docker/daemon.json
"hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"]
systemctl daemon-reload
systemctl restart docker
## tcp://0.0.0.0:2375
docker portainer
yml
version: "3"
services:
portainer:
image: portainer/portainer:latest
container_name: portainer
ports:
- "9090:9000"
离线安装docker
sh
tar xvf docker-24.0.3.tgz
cp docker/* /usr/bin
编辑 /etc/systemd/system/docker.service
chmod +x /etc/systemd/system/docker.service
systemctl daemon-reload
systemctl enable docker.service
systemctl start docker
systemctl status docker
systemctl restart docker
#配置 阿里云镜像加速
mkdir /etc/docker
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://m38560ti.mirror.aliyuncs.com"]
}
systemctl restart docker
## 配置 docker-compose
chmod +x docker-compose
mv docker-compose /usr/local/bin
docker-compose --version
sh
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
docker compose 限制内存和cpu
yaml
version: '3'
services:
nginx:
image: nginx:latest
container_name: nginx
deploy:
resources:
limits:
memory: 100M
cpus: "1"
ports:
- "81:80"
volumes:
- ./default.conf:/etc/nginx/conf.d/default.conf
- ./html:/usr/share/nginx/html