Docker部署

1、可访问官网方式

1、下载yum源

wget https://download.docker.com/linux/centos/docker-ce.repo

2、移动位置并重命名

mv docker-ce.repo /etc/yum.repos.d

3、安装docker

yum install -y docker-ce

4、启动docker

systemctl enable docker && systemctl start docker
2、使用国内镜像源方式

配置阿里镜像源。或可直接参考如下步骤

1、安装必要的系统工具

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

2、添加软件源信息

sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

3、更新并安装docker-ce

sudo yum makecache fast && yum -y install docker-ce

4、开启docker服务

sudo service docker start

5、启动docker

systemctl enable docker && systemctl start docker
清理docker环境
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine

Docker使用

镜像

镜像

查看镜像

查看docker版本

docker -v

查看docker运行状态

docker info

查看镜像列表

docker images

查看镜像详细信息

docker inspect 镜像名称

查看镜像制作过程

docker history 镜像名或id

拉取镜像

拉取镜像

docker pull 镜像名:标签

删除镜像

删除镜像

docker rmi 镜像名或id

删除所有镜像

docker rmi $(docker images -q)

容器

容器

启动容器

启动容器

docker run -it 镜像名或id /bin/bash
docker start 镜像名或id
命令 区别
docker run 首先在指定的镜像上创建一个可写的容器层,然后使用指定的命令启动它。这意味着 docker run 相当于执行了 docker createdocker start 两个步骤
docker start 用于启动已经存在的容器。它不会创建新的容器,而是重新启动已停止的容器

创建新容器但不启动

docker create -it 镜像名 /bin/bash

创建新容器并随容器而启动

docker run -it --restart=always 镜像名或id /bin/bash

进入后台运行的容器

docker exec -it 容器名或id /bin/bash

查看容器

修改容器名称

docker rename 旧名称 新名称

动态显示容器资源使用情况

docker stats

显示运行的容器里进程信息

docker top 容器名或id

捕获容器停止时的退出码

docker wait 容器名或id

查看所有容器

docker ps -a

查看运行中容器

docker ps

查看所有容器

docker container ls -a

查看所有容器id

docker container ls -q

拷贝容器

容器文件拷贝

docker cp 源文件路径 容器名或id:绝对路径

删除容器

暂停容器内所有进程

docker pause 容器名

删除容器

docker rm 容器名或id
容器必须是停止状态

删除所有容器

docker stop $(docker container ls -q)  && docker rm $(docker container ls -qa)

一次性容器(容器结束自动删除)

docker run -it --rm 容器名或id /bin/bash

打包容器

把运行中的容器打成tar包镜像文件

docker export -o xxx.tar 要打包的容器名或id
或
docker export 容器名称 > 镜像.tar

导入镜像文件

docker import 要导入的压缩包  自定义镜像名:版本号

创建本地镜像

docker commit [option] 容器id 镜像名或id
-m 添加注释
-a 作者
-p,–pause=true 提交时暂停容器运⾏

打包镜像

docker save -o xxx.tar 镜像名或id

解压镜像

docker load < xxxtar
命令 区别 适用场景
docker export 将一个 Docker 容器的文件系统打包成一个 tar 文件。这个 tar 文件不包含镜像的历史记录和元数据,只包含容器当前的状态。 需要快速创建容器的备份或快照,且不需要保留镜像的历史和元数据的情况。
docker save 将一个或多个 Docker 镜像打包成一个 tar 文件。这个 tar 文件包含了镜像的所有层、元数据和历史信息。 需要保存完整的镜像历史和元数据的情况,例如离线部署或备份镜像。

DockerFile

使用DockerFile创建镜像
DockerFile的主要指令:
  1. FROM:指定基础镜像。每个 Dockerfile 都以 FROM 开头,定义了镜像的起始点。例如:

    FROM ubuntu:20.04
    
  2. RUN:在镜像中执行命令。通常用于安装软件包或进行系统配置。例如:

    RUN apt-get update && apt-get install -y nginx
    
  3. COPY:将本地文件或目录复制到镜像中。例如:

    COPY ./localfile /path/in/container/
    
  4. ADD:类似于 COPY,但支持从 URL 下载文件和解压归档文件。例如:

    ADD https://example.com/file.tar.gz /path/in/container/
    
  5. CMD:指定容器启动时的默认命令。如果 Dockerfile 中定义了多个 CMD,只有最后一个 CMD 会生效。例如:

    CMD ["nginx", "-g", "daemon off;"]
    
  6. ENTRYPOINT:定义容器启动时的入口点,可以与 CMD 结合使用来设置默认参数。例如:

    ENTRYPOINT ["python"]
    CMD ["app.py"]
    
  7. EXPOSE:声明容器运行时会监听的端口,但不会自动打开端口。例如:

    EXPOSE 80
    
  8. VOLUME:创建挂载点,并可以在运行时挂载主机目录。例如:

    VOLUME ["/data"]
    
  9. WORKDIR:设置工作目录。之后的 RUNCMDENTRYPOINT 指令都会在这个目录下执行。例如:

    WORKDIR /app
    
  10. ENV:设置环境变量。例如:

    ENV APP_ENV=production
    

根据指定的DockerFile构建docker镜像

docker build [OPTIONS] < 路径 | URL | -> 1
【常用option说明】
--build-arg,设置构建时的变量
--no-cache,默认false。设置该选项,将不使⽤Build Cache构建镜像
--pull,默认false。设置该选项,总是尝试pull镜像的最新版本
--compress,默认false。设置该选项,将使⽤gzip压缩构建的上下⽂
--disable-content-trust,默认true。设置该选项,将对镜像进⾏验证
--file, -f,Dockerfile的完整路径,默认值为PATH/Dockerfile
--isolation,默认--isolation="default",即Linux命名空间;其他还有process或hyperv
--label,为⽣成的镜像设置metadata
--squash,默认false。设置该选项,将新构建出的多个层压缩为⼀个新层,但是将⽆法在多个镜
像之间共享新层;设置该选项,实际上是创建了新image,同时保留原有image。

--tag, -t,镜像的名字及tag,通常name:tag或者name格式;可以在⼀次构建中为⼀个镜像设置多个tag

--network,默认default。设置该选项,Set the networking mode for the RUN instr
uctions during build
--quiet, -q ,默认false。设置该选项,Suppress the build output and print image ID on success
--force-rm,默认false。设置该选项,总是删除掉中间环节的容器
--rm,默认--rm=true,即整个构建过程成功后删除中间环节的容器

示例

[root@docker-server tomcat]# vim Dockerfile
# This my first jenkins Dockerfile
# Version 1.0
FROM centos:7
MAINTAINER laochen@123.com
ENV JAVA_HOME /usr/local/jdk-11.0.16
ENV TOMCAT_HOME /usr/local/apache-tomcat-9.0.79
ENV PATH=$JAVA_HOME/bin:$PATH
ADD apache-tomcat-9.0.79.tar.gz /usr/local/
ADD jdk-11.0.16_linux-x64_bin.tar.gz /usr/local/
RUN rm -rf /usr/local/apache-tomcat-9.0.79/webapps/*
ADD jenkins.war /usr/local/apache-tomcat-9.0.79/webapps
RUN rm -rf apache-tomcat-9.0.79.tar.gz jdk-11.0.16_linux-x64_bin.tar.gz
EXPOSE 8080
ENTRYPOINT ["/usr/local/apache-tomcat-9.0.79/bin/catalina.sh","run"] #
⾏命令

官方私有仓库registry

官方私有仓库registry

1、拉取镜像

docker pull hub.atomgit.com/amd64/registry:2.8.2

2、运行容器

docker run -itd -v /home/dockerdata/registry:/var/lib/registry --name "pri_registry" --restart=always -p 5000:5000 hub.atomgit.com/amd64/registry:2.8.2


参数解释:
/home/dockerdata/registry表示为宿主机的⽬录,如果不存在⾃动创建
-v映射⽬录: 宿主机的⽬录:容器⽬录
把宿主机的⽬录挂载到容器中,将数据⽬录挂载出来就是为了防⽌docker私有仓库这个容器被删除的时候,仓库⾥⾯的镜像也被删除。
-p 端⼝映射:本地端⼝:容器端⼝

如果创建容器不成功,报错防⽕墙,解决⽅案如下

# systemctl stop firewalld
# yum install iptables*
# systemctl start iptables
# iptables -F
# systemctl restart docker

3、查看容器端口状态

docker exec -it 0823df7 /bin/sh

netstat -lntp #查看5000端⼝是否开启

4、修改请求方式

vim /etc/docker/daemon.json(不存在则创建)

{ "insecure-registries":["192.168.229.11:5000"] }

5、重启docker

systemctl restart docker

6、上传镜像

docker tag  hub.atomgit.com/amd64/httpd:2.4.57-alpine 192.168.229.11:5000/httpd
docker push 192.168.229.11:5000/httpd:latest

7、查看镜像

curl http://192.168.229.11:5000/v2/httpd/tags/list

宿主机查看镜像存放目录:
ls /home/dockerdata/registry/docker/registry/v2/httpd/

8、拉取镜像

docker pull 192.168.229.11:5000/httpd

部署docker web ui应用

部署docker web ui

1、下载容器并运行

docker pull uifd/ui-for-docker
docker run -itd --name docker-web -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock uifd/ui-for-docker:latest

2、浏览器访问

ip:9000

可能遇到的报错

可能遇到的报错
  • 1、docker info的时候报错:bridge-nf-call-iptables is disabled
    解决:
追加如下配置,然后重启系统
# vim /etc/sysctl.conf 
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-arptables = 1
  • 2、虚拟机ping百度也能ping通,但是需要等好⼏秒才出结果,关键是下载镜像⼀直报错
    docker pull daocloud.io/library/nginx
    Using default tag: latest
    Error response from daemon: Get https://daocloud.io/v2/: dial tcp: looku
    p daocloud.io on 192.168.1.2:53: read udp 192.168.1.189:41335->192.168.
    1.2:53: i/o timeout
    解决:
    更改DNS
    vim /etc/resolv.conf
    nameserver 8.8.8.8
    
❤️ 转载文章请注明出处,谢谢!❤️