docker的使用

docker的安装

  1. 删除旧docker,因为有些linux系统会自带一个老版本的docker

       yum -y remove docker docker-common container-selinux 
    
  2. 安装yum-utils,安装docker时候的工具包

      yum install -y yum-utils
    
  3. 安装docker,如果成功就不用执行下面的步骤了

    yum install docker-engine
    
  4. 如果提示找不到docker说明Linux原始的软件源中没有docker,需要更改软件源

    1. 进入/etc/yum.repos.d目录
    2. 删除里面原来的.repo文件
    3. 创建Centos-7.repo文件并编辑内容,拷贝以下所有内容到该文件中
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client.  You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#
[base]
name=CentOS-7 - Base - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/7/os/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/7/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
#released updates
[updates]
name=CentOS-7 - Updates - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/7/updates/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/7/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
#additional packages that may be useful
[extras]
name=CentOS-7 - Extras - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/7/extras/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/7/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-7 - Plus - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/7/centosplus/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/7/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
#contrib - packages by Centos Users
[contrib]
name=CentOS-7 - Contrib - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/7/contrib/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/7/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

创建并编辑该文件

	vim /etc/yum.repos.d/docker.repo

文件内容如下

[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
  1. 更新yum源

    yum clean all
    yum makecache fast 
    
  2. 再次安装docker

     yum install docker-engine 
    
  3. 没网络的安装方式(没有尝试过不确定可行)

    1. 使用rpm 包的方式进行安装

    2. 可以从 https://yum.dockerproject.org/repo/main/centos/ 中选择合适的CentsOS版本下载rpm包注意stable和testing

    3. 安装 docker

        sudo yum -y install /path/to/package.rpm
      
    4. 使用这种方式可能需要手动处理依赖问题。

         -ivh name.rpm --nodeps --force ##忽略依赖性并且强制安装
      

docker的使用

  • 所有指令如果不是root用户执行的都需要在指令前加sudo

启动docker

systemctl start docker

设置开机启动docker

chkconfig docker on 

查看本机所有的镜像文件

* docker images

这里的镜像相当于是一个容器的副本类似于ios镜像一样,通过这一个镜像可以启动多个容器。
启动后的容器类似于虚拟机一样有独立的linux环境。
通过docker可以确保开发环境和使用环境保持一致,避免因为环境导致软件无法运行

将镜像保存为本地文件

使用save 导出这种方式导入时候必须使用load导入

docker save ubuntu > /root/ubuntu.tar 

通过image id导出

docker save eb40dcf64078 > /root/tomcat.tar  

使用export 导出这种方式导入的时候必须使用import导入

docker export 98ca36> ubuntu.tar 

将文件下载到本地电脑,默认在C:\Users\用户名\Downloads

  1. 在SecureCRT 8.1中使用sz指令可以将上一步生成的tar包下载到本机

  2. 默认下载路径就是电脑的下载路径,也可以在options->session options->x/y/zmodem中修改下载的路径

     sz ubuntu.tar     
    

加载镜像到新机器

必须是save导出的tar文件才可以使用load 导入

	docker load < ubuntu.tar   

这个必须搭配export导出的才能用

docker import - tomcat:latest < tomcat.tar  指定镜像的REPOSITORY、TAG导入

修复新添加镜像REPOSITORY,TAG为none的情况

  1. 在新的机器上再此使用docker images命令查看本机的镜像
  2. 检查刚才load的镜像有没有加载进来,发现加载进来的镜像名称、标签均为none
  3. 使用docker tag eb40dcf64078 django:latest修改为原来的镜像名称和标签名称
  4. 其中eb40dcf64078 为images id,django是镜像名(REPOSITORY),latest是标签名(TAG)

运行镜像到容器

	使用docker run -itd django:latest  加载镜像到容器,验证镜像是否能够成功运行

不成功通常是使用了不搭配的导入导出导致的,save和load命令,export和import命令要匹配不能混用

使用dockerfile生成镜像

docker build imagesproject/  -t tomcat:latest 
  1. imagesproject/是项目路径,里面包含一个dockerfile
  2. -t tomcat:latest指定构建后的镜像的名字和版本号
  3. 在构建镜像的时候dockerfile中的指令可以访问其所在目录下的目录

查看正在运行的容器

docker ps

进入正在运行的容器

  1. 进入正在运行的容器的linux环境当中

     docker exec -it d48b21a7e439 /bin/sh      
    
  2. 其中d48b21a7e439为CONTAINER ID

  3. 需要注意容器内的linxu环境极度精简只能使用基础命令,在有网络的情况下也可以安装指令

  4. 在容器内的操作不会影响到镜像,通过镜像启动的新的容器还是没有修改前的状态,因为启动的时候是基于镜像启动的,生成好的镜像只能用dockerfile修改后创建新的镜像

停止正在运行的容器

docker stop NAMES,通过docker ps查看

停止所有容器

docker stop $(docker ps -a -q)

启动容器并映射外部端口

启动tomcat镜像到8080,前者是外围访问端口:后者是容器内部端口

docker run -d -p 8080:8080 tomcat

修改已有镜像的配置

  1. dockerfile修改镜像的时候是基于一个已有的镜像进行修改然后生成一个新的镜像,该操作只能在linux环境执行
  2. 通过dockerfile创建新的镜像,创建后该镜像会保存在docker images里面,如果忘记指定新镜像的名字,则名字为none,需要通过上文的方法修复
  3. 修改后再把修改后的镜像下载下来

删除已有的镜像

  1. 删除前要停止正在运行的容器

    docker ps 查看正在运行的容器
    desktop stop NAMES 停止正在运行的容器
    
  2. 还要删除运行过的记录

     docker ps -a 查看已经停止但是还有记录的容器
     docker rm c551bb2d0b1f 删除指定容器
    
  3. 删除指定的镜像

    docker images 查看所有的镜像 
    docker rmi 5e4f2da203e2   
    

Dockerfile指令

  1. FROM

     FROM 或 FROM :
    

第一条指令必须为FROM指令。

  1. MAINTAINET

    MAINTAINET 
    

指定维护者的信息

  1. RUN

     RUN  或 RUN ["", "", ""]
    

每条指令将在当前镜像基础上执行,并提交为新的镜像。(可以用“\”换行)

  1. CMD

     CMD ["","",""]
    

指定启动容器时执行的命令,每个Dockerfile只能有一条CMD指令,如果指定了多条指令,则只执行最后一条。

  1. EXPOSE

     EXPOSE   [  ...]
    

告诉Docker服务端对外开放的端口,在容器启动时需要通过 -p 做端口映射

  1. ENV

     ENV  
    

指定环境变量,会被RUN指令使用,并在容器运行时保存

  1. ADD

     ADD    
    

复制指定的到容器的中,可以是Dockerfile所在的目录的一个相对路径;可以是URL,也可以是tar.gz(自动解压)

  1. COPY

     COPY   
    

复制本地主机的 ( 为 Dockerfile 所在目录的相对路径)到容器中的 (当使用本地目录为源目录时,推荐使用 COPY)

  1. ENTRYPOINT

     ENTRYPOINT ["","",""]
    

配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。(每个 Dockerfile 中只能有一个 ENTRYPOINT ,当指定多个时,只有最后一个起效)

  1. VOLUME

    VOLUME ["/mnt"] 
    

创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等

  1. USER

    USER daemon
    

指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。

  1. WORKDIR

    WORKDIR /path/to/workdir
    

为后续的 RUN 、 CMD 、 ENTRYPOINT 指令配置工作目录。(可以使用多个 WORKDIR 指令,后续命令如果参数是相对路径, 则会基于之前命令指定的路径)

  1. ONBUILD

    ONBUILD [INSTRUCTION]
    

配置当所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令

故障排除

docker安装完成后无法启动

vim /etc/sysconfig/docker-storage 编辑该文件

DOCKER_STORAGE_OPTIONS=
vim /etc/sysconfig/docker
OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false'

vim /etc/docker/daemon.json 编辑该文件

{ "storage-driver": "devicemapper" }

最后重启docker

	systemctl restart docker

你可能感兴趣的:(linux)