Docker——安装、常用命令、生成镜像(Dockerfile)

Docker——安装、常用命令、生成镜像(Dockerfile)

1. Docker 安装

  1. 切换到root用户 $ su - root
  2. 安装yum工具 $ yum install -y yum-utils device-mapper-persistent-data lvm2
  3. 添加yum阿里云仓库 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  4. 查看yum源
    cat /etc/yum.repos.d/docker-ce.repo
    yum makecache fast
    yum list | grep docker
    
  5. 安装社区版Docker $ yum -y install docker-ce
  6. 启动/关闭 Docker
    # CentOS7
    systemctl start docker
    systemctl stop docker
    systemctl restart docker
    
  7. 查看Docker版本 $ docker version
  8. 配置阿里云的Docker镜像加速仓库
    • 登录阿里云
    • 进入控制台,搜索 容器镜像服务
    • 找到 镜像加速器,此处有自己的 加速器地址
    • 可以直接按阿里给出的命令执行,如下
    # 配置加速地址
    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
    "registry-mirrors": ["https://加速地址.mirror.aliyuncs.com"]
    }
    EOF
    # 重启Docker
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    
  9. 测试运行 HelloWorld $ docker run hello-world
  10. 添加普通用户到docker用户组(可以让普通用户也能使用docker)
    # 如果没有docker组,就创建一个
    sudo groupadd docker
    # 为用户jerry附加一个docker组
    sudo gpasswd -a jerry docker
    # 重新启动docker服务
    sudo systemctl restart docker
    # 操作完后记得重新登录该用户
    

2. Docker 常用命令

2.1 基础信息类

# 版本、信息
docker version
docker info
# 获取帮助
docker 回车
docker 命令 --help

2.2 镜像-基础命令

# 查看已有镜像
docker images
# 搜索镜像
docker search tomcat
# 拉取镜像
docker pull tomcat
# 删除镜像
docker rmi hello-world

# 运行镜像,并进入容器
docker run -it 470671670cac(镜像ID)
$ exit (退出并停止)
Ctrl + P + Q (退出)

2.3 容器-基础命令

# 查看正在运行的容器
docker ps (正在运行的容器)
docker ps -n3 (前面运行的3个容器)
# 启动/重启/停止容器
docker start 3ffbb477b4e2(容器ID)
docker restart 3ffbb477b4e2(容器ID)
docker stop 3ffbb477b4e2(容器ID)
# 强制关闭
docker kill 0b1263947889(容器ID)
# 删除容器
docker rm 0b1263947889(容器ID)
docker rm $(docker ps -qa | tail -3) 删除最后3个容器
# 进入正在运行的容器
docker attach 9e12d1175d04(容器ID)

# 后台运行容器
# centos的话,运行完后会退出
# 如果是阻塞的程序,不会退出
docker run -d centos

# 查看容器日志
docker logs a389c769edd1(容器ID)
docker logs -t a389c769edd1(容器ID) 显示时间
docker logs -f a389c769edd1(容器ID) 不停的追加
docker logs -t -f --tail 3 a389c769edd1(容器ID)

# 查看容器内的进程
docker top a389c769edd1(容器ID)
# 查看容器情况
docker inspect a389c769edd1(容器ID)

# 向容器发送命令
docker exec -t 9e12d1175d04 ls -l /tmp
# 以bash方式进入到容器
docker exec -t 9e12d1175d04 /bin/bash 

2.4 容器与宿主机(拷贝、端口映射、路径映射)

# 拷贝容器内的文件到宿主机
docker cp 容器ID:容器文件路径 宿主机路径
docker cp 9e12d1175d04:/tmp/test.txt ./

# 端口映射
# docker内是8080,宿主机是8099
# -d 后台运行
docker run -d -p 8099:8080 --name my_tomcat tomcat
# 文件映射
# 宿主机路径 /opt/docker_file_map/tomcat_webapps
# docker内路径 /usr/local/tomcat/webapps
docker run -d -p 8099:8080 -v /opt/docker_file_map/
tomcat/webapps:/usr/local/tomcat/webapps --name 
my_tomcat tomcat
# 运行后,再进入容器,可以进行各种编辑
docker exec -it 9e12d1175d04 /bin/bash

3. 生成镜像

3.1 Commit 方式

# 提交镜像
# 先进入已有容器,修改内容,然后提交
docker commit -a="作者名" -m="描述" 容器ID 包/名称:版本
docker commit -a="test_author" -m="tomcat test hello" b6c1ff931ffc skey/mytomcat:1.1
# 此时会生成一个新的镜像,然后可以启动
docker run -d -p 23333:8080 skey/mytomcat:1.1

3.2 Dockerfile 方式

  • 基本步骤
    # 1. 编辑Dockerfile (详见Dockerfile示例)
    # 2. 构建镜像(当前路径),最后的.是当前路径
    docker build -t hello:v1.0 .
    # 3. 运行镜像
    docker images | grep hello
    docker run -d -p 23333:8080 hello:v1.0
    # 4. 导出镜像
    docker save hello -o hello.tar
    # 5. 加载镜像
    docker load -i hello.tar
    
  • Dockerfile-语法
    # FROM 是继承哪一个镜像
    FROM java:8
    # 作者和邮箱
    MAINTAINER jerry<jerry2020@gmail.com>
    # ENV 是配置环境变量
    ENV mypath=/usr/local
    # WORKDIR 是工作目录,进入该镜像时会到该目录
    WORKDIR $mypath
    # ADD 添加并解压
    ADD test.zip  /
    # COPY 是只添加
    # 挂载容器的的路径
    VOLUME ["/data01", "/data02"]
    # 对外暴露的端口
    EXPOSE 8080
    # RUN 运行shell命令
    RUN ls /
    # CMD 容器启动时运行,运行shell命令,重复多个CMD时,只有
    最后一个生效
    # 并且会被`docker run 镜像ID`后面的命令会替换
    CMD /bin/bash
    # ENTRYPOINT 不会被替换,而是追加后面的参数
    ENTRYPOINT /bin/bash
    
  • Dockerfile-示例
    FROM centos
    # 作者和邮箱
    MAINTAINER jerry<jerry2020@gmail.com>
    # 挂载容器的的路径
    # 会自动与主机某个路径对应,需利用`docker inspect 容器ID`查看路径
    VOLUME ["/data01", "/data02"]
    CMD echo "finished ------ success"
    # 默认命令,容器启动时运行,只有最后一个CMD有效,并且会被docker run 后面的命令替换
    CMD /bin/bash
    
    # FROM 继承自镜像java:8
    FROM java:8
    
    # ENV 配置环境变量
    ENV LANG C.UTF-8
    ENV TZ=Asia/Shanghai
    ENV JAVA_OPTS="-Dspring.config.location=/hello/application.properties"
    
    # RUN 运行Linux命令
    RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
    
    ADD hello.zip  .
    
    RUN unzip hello.zip
    RUN chmod +x /hello/bin/start.sh
    RUN chmod +x /hello/bin/stop.sh
    
    # CMD 容器启动时运行,运行Linux命令
    CMD cd /hello/bin/&&./start.sh
    
  • Dockerfile-实践(做一个Java、Scala、Maven开发环境)
    • 选择一个目录,在该目录下准备好安装包,如下
      jdk-8u231-linux-x64.tar.gz
      scala-2.11.12.tgz
      apache-maven-3.6.3-bin.tar.gz
      
    • 在当前目录下编辑Dockerfile $ vim Dockerfile
      FROM centos:7
      MAINTAINER my_name<my_mail@gmail.com>
      
      # 解压宿主机的jdk、scala、maven到容器内
      ADD jdk-8u231-linux-x64.tar.gz /usr/local
      ADD scala-2.11.12.tgz /usr/local
      ADD apache-maven-3.6.3-bin.tar.gz /usr/local
      
      # 安装vim,下载有点慢
      RUN yum -y install vim
      
      # 配置环境变量
      ENV JAVA_HOME /usr/local/jdk1.8.0_231
      ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
      ENV SCALA_HOME /usr/local/scala-2.11.12/
      ENV MAVEN_HOME /usr/local/apache-maven-3.6.3
      ENV PATH $PATH:$JAVA_HOME/bin:$SCALA_HOME/bin:$MAVEN_HOME/bin
      
      # 暴露端口,不需要
      # EXPOSE 8080
      
      # 工作目录
      WORKDIR /usr/local/
      
      # 运行
      CMD java -version && scala -version && mvn -version && /bin/bash
      
    • 命令1 - 生成镜像 $ docker build -t my_java_scala_env:1.0 .
    • 命令2 - 运行镜像 $ docker run -it my_java_scala_env:1.0
    • 命令3 - 导出镜像 $ docker save my_java_scala_env:1.0 -o my_java_scala_env_1.0.tar
    • 复制到到其他服务器
    • 命令4 - 加载镜像 $ docker load -i my_java_scala_env_1.0.tar
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值