Docker基础

2023年 8月 18日 81.4k 0

环境搭建及安装

Centos7.0

[root@localhost sysconfig]# yum install docker

安装完成以后,启动可能会报以下错误

[root@localhost docker]# service docker start
Redirecting to /bin/systemctl start  docker.service
Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.

通过命令systemctl status docker查看日志

[root@localhost docker]# systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since 五 2019-05-17 17:15:40 CST; 2min 42s ago
     Docs: http://docs.docker.com
  Process: 4046 ExecStart=/usr/bin/dockerd-current --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current --default-runtime=docker-runc --exec-opt native.cgroupdriver=systemd --userland-proxy-path=/usr/libexec/docker/docker-proxy-current --init-path=/usr/libexec/docker/docker-init-current --seccomp-profile=/etc/docker/seccomp.json $OPTIONS $DOCKER_STORAGE_OPTIONS $DOCKER_NETWORK_OPTIONS $ADD_REGISTRY $BLOCK_REGISTRY $INSECURE_REGISTRY $REGISTRIES (code=exited, status=1/FAILURE)
 Main PID: 4046 (code=exited, status=1/FAILURE)
 
5月 17 17:15:38 localhost.localdomain systemd[1]: Starting Docker Application Container Engine...
5月 17 17:15:38 localhost.localdomain dockerd-current[4046]: time="2019-05-17T17:15:38.880925658+08:00" l...d"
5月 17 17:15:38 localhost.localdomain dockerd-current[4046]: time="2019-05-17T17:15:38.891456871+08:00" l...1"
5月 17 17:15:39 localhost.localdomain dockerd-current[4046]: time="2019-05-17T17:15:39.923455549+08:00" lev...
5月 17 17:15:40 localhost.localdomain dockerd-current[4046]: Error starting daemon: SELinux is not suppor...e)
5月 17 17:15:40 localhost.localdomain systemd[1]: docker.service: main process exited, code=exited, stat...URE
5月 17 17:15:40 localhost.localdomain systemd[1]: Failed to start Docker Application Container Engine.
5月 17 17:15:40 localhost.localdomain systemd[1]: Unit docker.service entered failed state.
5月 17 17:15:40 localhost.localdomain systemd[1]: docker.service failed.
Hint: Some lines were ellipsized, use -l to show in full.

重点在如下这一行Error starting daemon: SELinux is not suppor,表示此linux的内核中的SELinux不支持 overlay2 graph driver ,解决方法有两个,要么启动一个新内核,要么就在docker里禁用selinux,--selinux-enabled=false

[root@localhost docker]# vi /etc/sysconfig/docker


重新执行命令systemctl start docker
验证docker是否启动成功

[root@localhost sysconfig]# docker version
Client:
 Version:         1.13.1
 API version:     1.26
 Package version: docker-1.13.1-96.gitb2f74b2.el7.centos.x86_64
 Go version:      go1.10.3
 Git commit:      b2f74b2/1.13.1
 Built:           Wed May  1 14:55:20 2019
 OS/Arch:         linux/amd64

Server:
 Version:         1.13.1
 API version:     1.26 (minimum version 1.12)
 Package version: docker-1.13.1-96.gitb2f74b2.el7.centos.x86_64
 Go version:      go1.10.3
 Git commit:      b2f74b2/1.13.1
 Built:           Wed May  1 14:55:20 2019
 OS/Arch:         linux/amd64
 Experimental:    false

Docker指令

  • 启动docker: systemctl start docker
  • 停止docker: systemctl stop docker
  • 重启docker: systemctl restart docker
  • 查看docker状态:systemctl status docker
  • 开机启动:systemctl enable docker
  • 查看docker概要信息:docker info
  • 查看docker总体帮助文档:docker --help

IDEA连接Docker

1、编辑docker服务vim /usr/lib/systemd/system/docker.service,添加如下内容

-H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375

image.png
2、IDEA安装Docker插件
3、配置Docker信息

image.png

IDEA打包镜像

1、在pom下新增插件docker-maven-plugin:1.0.0


    com.spotify
    docker-maven-plugin
    1.0.0
    
        
        http://IP:2375
        
        xpz/${project.artifactId}
        
        src/main/docker
        
            
                
                /
                
                ${project.build.directory}
                
                ${project.build.finalName}.jar
            
        
    

2、在右侧通过命令docker:build即可构建镜像并上传到服务器,前提是IDEA已经连接到Docker服务器

image.png

镜像

  • docker pull NAME[:TAG]:下载镜像,默认从Docker Hub仓库中下载,也可以指定仓库,如从dl.dockerpool.com中下载,docker pull dl.dockerpool.com:5000/NAME[:TAG]
  • docker images:查看镜像
  • docker inspect:查看镜像的详细信息
  • docker tag OLD_NAME NEW_NAME:给本地镜像添加新的标签,新的标签镜像跟原来的镜像具有相同的镜像ID
  • docker search:搜索远程仓库中共享的镜像
    • --automated=false 仅显示自动创建的镜像
    • --no-trunc=false 输出信息不截断显示
    • --stars=0 指定仅显示评价为指定星际以上的镜像
  • docker rmi IMAGE:删除镜像,删除时要先删除由该镜像产生的容器
  • docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]:基于已有镜像的容器创建新的镜像
    • -a 作者信息
    • -m 提交信息
    • -p 提交时暂停容器运行
  • docker save -o NEW_NAME IMAGE[:TAG]:存出镜像,NEW_NAME一般为tar格式的压缩包
  • docker load --input NEW_NAME:载入镜像
  • docker push NAME[:TAG]:上传镜像,第一次上传时,会提示输入账号信息

容器

  • docker create [OPTIONS] IMAGE[:TAG]:根据镜像创建容器
  • docker start CONTAINER_ID:启动容器
  • docker run [OPTIONS] IMAGE:创建并启动容器
    • -d 让容器在后台以守护态形式运行
  • docker logs CONTAINER_ID:获取容器的输出信息
  • docker stop CONTAINER_ID:停止容器
  • docker restart CONTAINER_ID:重启容器
  • docker rm [OPTIONS] CONTAINER_ID:删除容器
    • -f 强行终止并删除一个运行中的容器
    • -l 删除容器的连接,但保留容器
    • -v 删除容器挂载的数据卷
  • docker exec:进入容器并执行命令
  • docker export CONTAINER_ID > NEW_NAME:导出容器到文件,NEW_NAME一般为tar格式的压缩包
  • docker import:导入容器,成为镜像

仓库

  • docker run -d -p 5000:5000 registry:通过官方registry镜像搭建本地私有仓库,监听端口为5000

Dockerfile

dockerfile使用#开头的注释行,第一行必须指定基于的基础镜像

指令

  • FROM ::指定基础镜像
  • MAINTAINER :指定维护者信息
  • RUN:将在当前镜像基础数执行指定命令,并提交为新的镜像
    • 将在shell终端中运行命令
    • ["executable", "param1", "param2"] 使用exec执行,指定使用其它终端执行命令,例如RUN ["/bin/bash","-c","echo hello"]
  • CMD:指定启动容器时执行的命令,每个dockerfile只能有一条CMD命令。如果指定了多条,只有最后一条会被执行
    • ["executable", "param1", "param2"] 使用exec执行,推荐
    • param1 param2 在/bin/sh中执行
    • ["param1","param2"] 提供给ENTRYPOINT的默认参数
  • EXPOSE :告诉Docker服务端容器暴露的端口号
  • ENV :指定环境变量,供RUN指令使用,使用时通过$引用
  • ADD :复制指定的src到容器中的dest,src可以是Dockerfile所在目录的一个相对路径(文件或目录);也可以是一个URL;还可以是一个tar文件
  • COPY :复制本地主机的src为容器中的dest,目标路径不存在时,会自动创建
  • ENTRYPOINT:配置容器启动后执行的命令,并且不可被docker run提供的参数覆盖,每个Dockerfile中只能有一个ENTRYPOINT,如果指定了多个,只有最后一个生效
    • ["executable", "param1", "param2"] 使用exec执行,推荐
    • 将在shell终端中运行命令
  • VOLUME ["/data"]:创建一个可以从本地主机或其它容器挂载的挂载点,一般用来存放数据库和需要保持的数据
  • USER :指定运行容器时的用户名或UID,后续的RUN也会使用指定用户
  • WORKDIR :为后续的RUN、CMD、ENTRYPOINT指令配置工作目录
  • ONBUILD [INSTRUCTION]:配置当所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令
  • docker build:根据dockerfile文件创建镜像
示例
# 指定基础镜像
FROM openjdk:8-jdk-alpine
# 指定维护者信息
MAINTAINER Jacky
# 添加jar包到镜像并重新命名
ADD *.jar im.jar
# 挂载目录,指在容器中指定一个目录,用来供容器启动时方便宿主机挂载
VOLUME ["/logs"]
# 镜像启动后暴露的端口
EXPOSE 9830
# 容器启动执行运行jar指令
ENTRYPOINT ["java", "-jar", "im.jar"]

将jar包和Dockfile文件放在同一目录下,通过命令docker build构建为镜像

# docker build -t imageName:tagName dir
# -t:给镜像加一个Tag
# imageName:镜像名称
# tagName:镜像Tag名称
# dir:Dockerfile文件所在目录,如果是当前目录,可以用.表示
docker build -t im:1.0.0 .

docker-compose

#指定Docker Compose的版本号,通常是3, 第一行显示
version: '3'
services:
  mysql:
    #定义镜像
    image: mysql:latest
    #指定Dockerfile所在目录,自动构建镜像,这是在没有镜像,需要构建镜像的情况下使用
    build: ./dir
    #自定义容器名称
    container_name: mysql
    #设置这个可以 springboot yml文件可以读取这里的值
    environment:
      - TZ=Asia/Shanghai
    #输出文件到宿主机目录 前面是宿主机目录。
    volumes:
      - ./logs/data:/logs
    #指定端口号
    ports:
      - "3306:3306"
    #指定网络连接方式
    networks:
      - spring-boot-net
    #docker 重启 容器也会重启
    restart: always

  hello:
    image: hello:dev
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - ./logs/hello:/logs
    ports:
      - "8080:8080"
    #前置服务,通过该指令决定启动的先后顺序
    depends_on:
      - mysql
    links:
      - mysql
    networks:
      - spring-boot-net
	restart : always
  #设置容器启动后默认执行的命令
    command: sh -c '/./wait-for-it.sh test:8081 -t 0
  #    privileged: true

# 配置网络连接方式,默认bridge(桥接)
networks:
  spring-boot-net:
    driver: bridge

docker-compose常用指令

# 1. 基于docker-compose.yml启动管理的容器
docker-compose up -d
# 2. 关闭并删除容器
docker-compose down
# 3. 开启|关闭|重启已经存在的由docker-compose维护的容器
docker-compose start|stop|restart
# 4. 查看由docker-compose管理的容器
docker-compose ps
# 5. 查看日志
docker-compose logs -f

镜像推荐

  • portainer:可视化管理镜像及容器应用
    • 启动命令:docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

相关文章

服务器端口转发,带你了解服务器端口转发
服务器开放端口,服务器开放端口的步骤
产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
如何使用 WinGet 下载 Microsoft Store 应用
百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

发布评论