2020+docker技术基本概述

1.docker概述

docker是一个实现容器技术的软件,依赖于 Linux 内核技术 chroot 、namespace 和 cgroup。

程序架构

docker是CS架构的软件,命令行敲的命令会发送到一个守护进程docker Daemon执行。一般地,命令行和守护进程在同一个计算机运行。容器,镜像的管理由docker Daemon执行,命令行无需关心。

核心概念

docker有三个核心概念,镜像,容器和仓库。

2.docker安装的简单方法

# 执行脚本简易安装(官方提供)
$ sudo apt-get install curl
$ curl -sSL https://get.daocloud.io/docker | sh
# 修改添加当前用户到docker用户组,修改socket权限
$ sudo usermod -aG docker 自己的用户名(这是一个用户)
$ sudo chmod 777 /var/run/docker.sock
# 退出终端后再次进入测试命令
$ docker --help
第一次运行可以 docker run hello-world来测试

卸载命令 :

apt-get remove docker
apt-get remove docker-ce

apt-get remove docker-ce

重点:

1 docker客户端 连接本机的docker服务端(daemon), 发送命令。

2 docker服务端 从 仓库中拉去 镜像。

3 docker服务端 运行镜像,用来创建一个容器,并 执行容器中的软件,软件输出数据到docker服务端。

4 docker服务端将输出的数据发送给 docker客户端, docker客户端把数据发送到终端显示。

仓库:

类似github,docker官方设定了一个docker镜像的仓库:仓库的官方网站 :https://hub.docker.com/

  • 本地计算机可以拉去dockerhub上的镜像
# 完整的docker镜像名称是 作者/镜像名:标签,  拉取镜像不需要带作者名
$ docker pull ubuntu/ubuntu:latest
  • 本地计算机的镜像可以推送到dockerhub的账户内
# 登陆,按照提示输入github的用户名密码
$ docker login
# 将本地镜像重命名成规范名称
$ docker tag ubuntu marklion/ubuntu:myfirsttag
# 推送自己的镜像
$ docker push marklion/ubuntu:myfirsttag
  • 镜像的修改,提交等操作很类似git和github的操作。

镜像

  • 概念: 一组环境的静态集合,类似操作系统镜像。
  • 特点: docker镜像有分层依赖的关系。创建镜像的过程就好像写代码,从简单到复杂的过程。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6PfISZ0d-1590243586569)(G:\面试\分类总结\图片\镜像分层.png)]

  • 运行: 镜像运行后会产生容器。基于一个镜像可以运行多个容器。
# 查看当前所有的镜像
$ docker images
# 运行ubuntu镜像:在ubuntu容器中执行一条ls的命令,不写命令则运行bash
$ docker run --rm -ti ubuntu ls
# --rm -ti参数:运行结束后删除容器,提供虚拟终端和交互式界面
  • 进入:

    $ docker run --rm -ti ubuntu bash
    或者
    $ docker run --rm -ti ubuntu
    
  • 创建: 类似基于原始系统搭环境

    • 手动创建

      1. 下载并运行基础镜像
      2. 进入基础镜像的容器内安装所需环境
      3. 将容器提交为镜像
      # 直接执行ifconfig,报错,因为基础镜像没有安装ifconfig包
      $ docker run --rm ubuntu ifconfig
      docker: Error response from daemon: OCI runtime create failed: container_linux.go:344: starting container process caused "exec: \"ifconfig\": executable file not found in $PATH": unknown.
      ERRO[0000] error waiting for container: context canceled 
      # 进入基础镜像,安装工具包后退出
      $ docker run -ti ubuntu
      # apt-get update
      # apt-get install -y net-tools
      # exit
      # 找到刚才的容器,基于其创建镜像
      $ docker ps -a
      CONTAINER ID        IMAGE               COMMAND             CREATED          STATUS                      PORTS               NAMES
      034abada670c        ubuntu              "/bin/bash"         31 minutes ago      Exited (0) 20 seconds ago                       zealous_swirles
      # commit命令用于容器---》镜像
      # 容器ID可以用简写
      $ docker commit 034a my_unbuntu:add_net
      $ docker images
      REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
      my_unbuntu          add_net             6ca02b1d0483        5 seconds ago       114MB
      # 用新镜像运行ifconfig
      $ docker run --rm my_unbuntu:add_net ifconfig
      eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
          inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
          ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
          RX packets 2  bytes 200 (200.0 B)
          RX errors 0  dropped 0  overruns 0  frame 0
          TX packets 0  bytes 0 (0.0 B)
          TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
      
      lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
          inet 127.0.0.1  netmask 255.0.0.0
          loop  txqueuelen 1000  (Local Loopback)
          RX packets 0  bytes 0 (0.0 B)
          RX errors 0  dropped 0  overruns 0  frame 0
          TX packets 0  bytes 0 (0.0 B)
          TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
      
    • 脚本创建 (后面第 2.5 节 做更详细的介绍)

      1. 编写Dockerfile
      2. 运行docker编译命令
      # Dockerfile中定义基础镜像,和要运行的安装命令
      $ cat Dockerfile
      FROM ubuntu
      RUN apt-get update
      RUN apt-get install -y net-tools
      # 编译镜像,指定镜像名是df_unbutu:add_net,指定Dockerfile所在目录是当前目录
      $ docker build -t df_unbutu:add_net .
      

    小结: 手动创建方便操作,脚本创建方便分享。

    查看所有镜像

    docker images
    

    删除镜像

    docker rmi *镜像ID
    docker rmi *镜像名称
    

    删除所有镜像:

    docker rmi $(docker images -q)
    

3.ubuntu中修改docker镜像源简单方法

1.启动容器时,挂载本地Linux系统的etc/apt文件到容器中

docker run -ti -v /etc/apt/:/xxx ubuntu

2.进入容器/etc/apt目录下删除 sources.list文件

rm sources.list

3.将挂载文件夹下的sources.list文件拷贝过来

cp /apt/sources.list ./

4.使用docker编译部署c/c++程序

用docker部署c/c++程序,首先需要一个Linux的基础镜,可以是ubuntu、centos、alpine等。这里用alpine,而alpine最大的优点是体积小。

1.docker pull alpine  //拉取镜像
2.docker images   //查看一下镜像大小 大概5兆多
3.docker run -ti alpine
4.apk add vim    //安装vim后写一个hello.c
5.apk add gcc
6.apk add libc-dev
7.gcc hello.c -o hello 
8.运行./hello即可

你可能感兴趣的:(docker)