Skip to content

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