docker安装使用

1 什么是 Docker

Docker 是一个开源的应用容器引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。

开发者在本地编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。

2 在 Ubuntu 上安装 Docker 引擎

2.1 卸载旧版本的 docker

$ sudo apt-get remove docker docker-engine docker.io containerd runc

2.2 安装

2.2.1 设置存储库
  • 更新包索引和安装包以允许通过 HTTPS 使用存储库

    $ sudo apt-get update
    
    $ sudo apt-get install \
        apt-transport-https \
        ca-certificates \
        curl \
        gnupg-agent \
        software-properties-common
    
  • 添加 Docker 的官方 GPG 密钥

    $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    

    通过搜索指纹的最后 8 个字符,验证您现在是否拥有指纹9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88的密钥

    $ sudo apt-key fingerprint 0EBFCD88
    
    pub   rsa4096 2017-02-22 [SCEA]
          9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
    uid           [ unknown] Docker Release (CE deb) <docker@docker.com>
    sub   rsa4096 2017-02-22 [S]
    
  • 使用以下命令设置稳定存储库

    $ sudo add-apt-repository \
       "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
       $(lsb_release -cs) \
       stable"
    
2.2.2 安装 docker 引擎
  • 更新包索引,安装最新版本的 docker引擎和容器

    $ sudo apt-get update
    $ sudo apt-get install docker-ce docker-ce-cli containerd.io
    
  • 要安装特定版本的 docker引擎,请在存储库中列出可用版本,然后选择并安装

    #列出可用版本
    $ apt-cache madison docker-ce
    
    #安装指定的版本
    $ sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io
    
  • 验证docker是否正确安装了 (可以不用去做)

    $ sudo docker run hello-world
    

3 常用的命令

3.1 容器

  • 创建容器

    # 以交互模式启动一个容器,在容器内执行bash命令。
    # -i: 以交互模式运行容器,通常与 -t 同时使用。
    $ sudo docker run -it ubuntu:18.04 bash
    
  • 启动停止的容器

    $ sudo docker start [容器ID]
    
  • 停止运行的容器

    $ sudo docker stop [容器ID]
    
  • 重启容器

    $ sudo docker restart [容器ID]
    
  • 进入到容器

    # 进入到容器的内部,执行 exit 时退出容器
    $ sudo docker attach [容器ID]
    
  • 查看正在运行的容器

    $ sudo docker ps
    
  • 查看所有的容器

    $ sudo docker ps -a
    
  • 杀死正在运行的容器

    $ sudo docker kill [容器ID]
    

3.2 镜像

  • 创建镜像

    # 使用当前目录的 Dockerfile 创建镜像,镜像名字和标签为 myimage:mylable
    # -t: 镜像的名字及标签。
    $ sudo docker build -t myimage:mylable . 
    
  • 查看镜像

    $ sudo docker images
    
  • 删除镜像

    • 列出容器

      $ sudo docker ps -a
      
    • 移除对应的容器

      $ sudo docker rm [容器ID]
      
    • 列出镜像

      $ sudo docker images
      
    • 删除镜像

      $ sudo docker rmi [镜像ID]
      

4 Dockerfile

4.1 概念

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

4.2 指令

  • FROM:定制的镜像都是基于 FROM 的镜像

  • RUN:用于执行后面跟着的命令行命令

  • WORKDIR:指定工作目录

  • ENV:设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量

  • 开始构建镜像

    命令

    $ docker build -t [镜像名称]:[镜像标签] .
    

    点代表执行的上下文路径,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包。

    **注意:**上下文路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢。

    Dockerfile 文件所在路径创建 .dockerignore ,里面可以写要忽略的路径和文件(很好用

5 构建容器的举例

5.1 基础镜像构建容器(以Ubuntu为例)

基础镜像简单,小巧,只有基本功能。版本

5.1.1 拉取 Ubuntu 镜像
$ docker pull ubuntu:18.04
5.1.2 构建容器
  • run.sh 脚本内容

    #!/bin/sh
    work_path=$(dirname $(readlink -f $0))
    container=$(docker ps -a | grep 'xxx' | grep -oP '\S+' | head -1) #要用新生成的容器ID替换xxx
    #echo $work_path
    #echo $container
    #如果容器不存在就会创建容器
    if [ -z "$container" ]; then
        # --privileged: 扩展权限,可以操作宿机,会有风险.
        # -i: 交互式操作.
        # -t: 终端.
        # -d: 在后台运行容器,并且打印容器id
        # -v: 挂载目录到容器.
        # -w: 指定工作目录,运行的时候会直接进入到这个目录下.
        # --name: 为新建的容器指定名称.
        # ubuntu:18.04: 容器的基础镜像.
        # /bin/bash: 交互式 Shell 用的是 /bin/bash.
        docker run -it -v $work_path:/sdk -w /sdk --name sd_build ubuntu:18.04 /bin/bash
    else
        docker start $container
        docker attach $container
        # 和 attach 一样,但是退出时不会关闭容器
        #docker exec -it $container /bin/bash
    fi
    
  • 执行脚本

    $ sudo ./run.sh
    

5.2 定制镜像构建容器

这里是以 ubuntu:16.04 为基本新建一个定制的镜像 myimage:mylable ,然后以 myimage:mylable 镜像来构建容器。

5.2.1 文件目录
relax@ubuntu:~/mydocker$ tree -La 2
.
├── Dockerfile         # 规则文件
├── .dockerignore      # 忽略的文件写在这里面
├── build.sh           # 构建镜像的脚本
└── run.sh             # 生成,运行容器的脚本
5.2.2 内容
  • Dockerfile

    FROM ubuntu:16.04
    
    # Install dependencies
    RUN apt-get -y update && apt-get install -y --no-install-recommends \
    	git \
    	tree
    
    # Setup build directory and root user
    WORKDIR /sdk
    
  • .dockerignore
    写上要忽略的文件

  • build.sh

    #!/bin/sh
    docker build -t myimage:mylable .
    
  • run.sh

    #!/bin/sh
    work_path=$(dirname $(readlink -f $0))
    container=$(docker ps -a | grep '11111' | grep -oP '\S+' | head -1) # 要用新生成的容器ID替换11111。
    #echo $work_path
    #echo $container
    #如果容器不存在就会创建容器。
    if [ -z "$container" ]; then
        # --privileged: 扩展权限,可以操作宿机,会有风险.
        # -i: 交互式操作.
        # -t: 终端.
        # -d: 在后台运行容器,并且打印容器id
        # -v: 挂载目录到容器.
        # -w: 指定工作目录,运行的时候会直接进入到这个目录下.
        # --name: 为新建的容器指定名称.
        # myimage:mylable: 容器的基础镜像.
        # /bin/bash: 交互式 Shell 用的是 /bin/bash.
    	docker run -it -v $work_path:/sdk -w /sdk --name mycontainername myimage:mylable /bin/bash
    else
    	docker start $container
    	docker attach $container
        # 和 attach 一样,但是退出时不会关闭容器
        #docker exec -it $container /bin/bash
    fi
    
5.2.3 执行步骤
  • 定制新镜像

    $ sudo ./build.sh
    
  • 构建容器

    $ sudo ./run.sh
    

6 其它

6.1 容器里可以安装 OpenSSL

  • 下载

    # 一般下载完成后会默认启动服务
    $ sudo apt-get update
    $ sudo apt-get install openssh-server
    
  • 其他相关命令

    # 查看服务是否启动
    $ sudo ps -e | grep ssh
    
    # 启动服务
    $ sudo /etc/init.d/ssh start
    
    # 查看服务状态
    $ sudo service ssh status
    
    # 关闭服务
    $ sudo service ssh stop
    
    # 重启服务
    $ sudo service ssh restart
    

6.2 同步时区和时间

$ sudo apt-get update
$ sudo apt install tzdata

# 临时起作用
$ export TZ=Asia/Shanghai

# 永久
# 1.打开文件
vim ~/.bashrc

# 2.末尾加上一下内容
export TZ=Asia/Shanghai

# 3.使能
source ~/.bashrc

6.3 支持中文

6.3.1 查看系统配置
# 查看本地使用的语言环境
root@de4a1a7fc9e6:/sdk# locale
LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=

# 查看本地支持的语言环境
root@de4a1a7fc9e6:/sdk# locale -a
C
C.UTF-8
POSIX
6.3.2 修改系统配置支持中文(永久生效)
# 修改配置
root@de4a1a7fc9e6:/sdk# vim ~/.bashrc
# 末尾添加上 export LANG=C.UTF-8

# 加载配置
root@de4a1a7fc9e6:/sdk# source ~/.bashrc

# 查看本地使用的语言环境
root@de4a1a7fc9e6:/sdk# locale
LANG=C.UTF-8
LANGUAGE=
LC_CTYPE="C.UTF-8"
LC_NUMERIC="C.UTF-8"
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY="C.UTF-8"
LC_MESSAGES="C.UTF-8"
LC_PAPER="C.UTF-8"
LC_NAME="C.UTF-8"
LC_ADDRESS="C.UTF-8"
LC_TELEPHONE="C.UTF-8"
LC_MEASUREMENT="C.UTF-8"
LC_IDENTIFICATION="C.UTF-8"
LC_ALL=
6.3.3 永久生效,修改 Dockerfile
# 制作镜像的时候加上这一行
ENV LANG C.UTF-8

6.4 本地镜像的导出、导入

​ 当一个新的项目到来时,我们可能需要配置新的开发环境,制作基础镜像。

​ 比如我们从一个 ubuntu 镜像启动一个容器,然后安装一些软件和进行一些设置后,使用 docker export 保存为一个基础镜像。然后,把这个镜像分发给其他人使用。

6.4.1 导出镜像
# 查看所有容器
$ sudo docker ps -a
CONTAINER ID   IMAGE                 COMMAND         CREATED         STATUS                      PORTS     NAMES
de4a1a7fc9e6   ubuntu16.04:nt98323   "bash"          14 months ago   Exited (0) 8 days ago                 vigorous_kilby
cde86db6cb11   ubuntu16.04:nt98323   "bash"          15 months ago   Exited (0) 7 months ago               cool_aryabhata
8b3a2c1fa9ed   ubuntu16.04:imx8qxp   "bash"          20 months ago   Exited (0) 2 months ago               gallant_mendeleev

# 导出容器,会在当前目录下生成文件
# docker export [OPTIONS] CONTAINER
$ sudo docker export [de4a1a7fc9e6] > nt98323.tar
6.4.2 导入镜像
# 导入镜像
# docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
$ sudo cat nt98323.tar | docker import - ubuntu16.04:new_nt98323

# 使用下面的命令查看导入的镜像
$ sudo docker images

# 然后可以以此镜像为基础创建容器进行开发
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值