docker入门指南

Docker的安装

采用在线安装,参考自docker官方文档

前提条件

操作系统要求

操作系统版本:Ubuntu Bionic 18.04

卸载旧版本
$ sudo apt-get remove docker docker-engine docker.io containerd runc
支持的存储驱动程序

Ubuntu的支持overlay2aufsbtrfs存储驱动程序。

安装方法

使用仓库安装(Install using the repository)

在新主机上首次安装Docker Engine之前,需要设置Docker存储库。之后,就可以从存储库安装和更新Docker。

设置仓库(SET UP THE REPOSITORY)
  1. 更新apt软件包索引并安装软件包以允许apt通过HTTPS使用存储库:

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

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

    国外源较慢,可使用阿里云镜像:

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

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

    $ 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]
    
  3. 使用以下命令来设置稳定的存储库。要添加 nightlytest存储库,请在下面的命令中在单词stable后面添加nightlytest(或两者)

    $ sudo add-apt-repository \
       "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
       $(lsb_release -cs) \
       stable"
    

    可添加阿里云镜像

    $ sudo add-apt-repository \
       "deb [arch=amd64] https://mirrors.aliyun.com/linux/ubuntu \
       $(lsb_release -cs) \
       stable"
    
安装Docker仓库(INSTALL DOCKER ENGINE)
  1. 更新apt程序包索引,并安装最新版本的Docker Engine和容器,或转到下一步以安装特定版本:

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

    • 列出您的仓库中可用的版本:
    $ apt-cache madison docker-ce
    
      docker-ce | 5:18.09.1~3-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu  xenial/stable amd64 Packages
      docker-ce | 5:18.09.0~3-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu  xenial/stable amd64 Packages
      docker-ce | 18.06.1~ce~3-0~ubuntu       | https://download.docker.com/linux/ubuntu  xenial/stable amd64 Packages
      docker-ce | 18.06.0~ce~3-0~ubuntu       | https://download.docker.com/linux/ubuntu  xenial/stable amd64 Packages
      ...
    
    • 使用第二列中的版本字符串安装特定版本,例如5:18.09.1~3-0~ubuntu-xenial
    $ sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io
    
  3. 通过运行hello-world 映像来验证是否正确安装了Docker Engine

    $ sudo docker run hello-world
    

    首次执行此命令会提示本地找不到该镜像,接着自动执行pull命令拉取镜像,并显示签名信息和运行结果。依据返回结果我们可以判断Docker是否安装成功。

  4. 查看本地Docker镜像

    $ sudo docker images
    

    这时候hello-world已经在本地镜像了。

卸载Docker(Uninstall Docker Engine)
  1. 卸载Docker Engine,CLI和Containerd软件包

    $ sudo apt-get purge docker-ce docker-ce-cli containerd.io
    
  2. 主机上的镜像,容器,卷或自定义配置文件不会自动删除。要删除所有镜像,容器和卷:

    $ sudo rm -rf /var/lib/docker
    

    我们可以发现/var/lib/docker是Docker镜像默认存储路径

阿里云镜像加速

  1. 登陆阿里云找到容器镜像服务下的镜像加速器

  2. 输入操作文档内的命令

    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://qatn66l7.mirror.aliyuncs.com"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    

基本命令

可参照官方给出的reference

帮助命令

命令后面添加--help

$ docker search --help  #搜索镜像
Usage:	docker search [OPTIONS] TERM

Search the Docker Hub for images

Options:
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print search using a Go template
      --limit int       Max number of search results (default 25)
      --no-trunc        Don't truncate output

镜像命令

  1. 查看本地镜像

    $ sudo docker images	
    REPOSITORY         TAG                IMAGE ID           CREATED            SIZE
    hello-world        latest             bf756fb1ae65       5 months ago       13.3kB
    
    #可选项
    -q   只显示id
    -a   显示所有镜像
    
    # 解释
    repository    镜像的仓库源
    tag           镜像的标签
    image id      镜像的id
    created       镜像创建的日期
    size          镜像的大小
    
  2. 搜索镜像

    比如搜索mysql

    sudo docker search mysql
    NAME                              DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
    mysql                             MySQL is a widely used, open-source relation…   9677                [OK]                
    mariadb                           MariaDB is a community-developed fork of MyS…   3520                [OK]                
    mysql/mysql-server                Optimized MySQL Server Docker images. Create…   705                                     [OK]
    
    #可选项
    --filter = 条件      过滤搜索结果
    
  3. 下载镜像

    $ docker pull ubuntu:14.04  # :后面指定版本号,不指定就默认最新版
    
    14.04: Pulling from library/ubuntu
    5a132a7e7af1: Pull complete #分层下载
    fd2731e4c50c: Pull complete
    28a2f68d1120: Pull complete
    a3ed95caeb02: Pull complete
    Digest: sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
    Status: Downloaded newer image for ubuntu:14.04
    
  4. 删除镜像

    $ docker images
    
    REPOSITORY             TAG              IMAGE ID         CREATED           SIZE
    test1                  latest           fd484f19954f     23 seconds ago    7 B (virtual 4.964 MB)
    test                   latest           fd484f19954f     23 seconds ago    7 B (virtual 4.964 MB)
    test2                  latest           fd484f19954f     23 seconds ago    7 B (virtual 4.964 MB)
    
    
    $ docker rmi test1:latest	 		 #通过digest:tag删除
    
    Untagged: test1:latest
    
    $ docker rmi -f fd484f19954f		 #通过-f id删除
    
    Untagged: test1:latest
    Untagged: test:latest
    Untagged: test2:latest
    Deleted: fd484f19954f4920da7ff372b5067f5b7ddb2fd3830cecd17b96ea9e286ba5b8
    
    $ docker rmi -f $(docker images -aq) #递归删除所有镜像
    

容器命令

先获取Ubuntu镜像,用来创建容器

$ sudo docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
a4a2a29f9ba4: Pull complete 
127c9761dcba: Pull complete 
d13bf203e905: Pull complete 
4039240d2e0b: Pull complete 
Digest: sha256:35c4a2c15539c6c1e4e5fa4e554dac323ad0107d8eb5c582d6ff386b383b7dce
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

新建容器并启动

$ sudo docker run [可选参数] image

# 参数说明
--name name	    容器名字,用来区分容器
-d              后台运行
-it             采用交互方式运行,进入容器查看内容
-p(小写)         指定容器端口(主机端口:容器端口)
-P(大写)         随机指定端口

# 启动并进入容器
master@ubuntu:/$ sudo docker run -it ubuntu /bin/bash
root@badfc42d23dd:/# 

# 退出容器
root@badfc42d23dd:/etc# exit
exit
master@ubuntu:/$ 

# 退出不停止容器
ctrl+p+q

查看容器并启动

# 查看所有停止的和正在运行的容器
$ sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
badfc42d23dd        ubuntu              "/bin/bash"         7 minutes ago       Exited (0) 3 minutes ago                       nervous_maxwell
4d829636f1a0        hello-world         "/hello"            18 hours ago        Exited (0) 18 hours ago                        elated_haibt

# 启动一个已停止的容器
$ sudo docker start badfc42d23dd

# 进入一个后台运行的容器
$ sudo docker attach 8a1452e443ff 				#exit会终止
$ sudo docker exec -it 8a1452e443ff /bin/bash	#exit会继续在后台运行

停止容器

$ sudo docker stop badfc42d23dd

# 停止的容器可通过docker restart重启
$ sudo docker restart badfc42d23dd

删除容器

$ sudo docker rm -f 6f8509b99c35

# 删除所有终止状态的容器
$ sudo docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
badfc42d23ddc178f9baf4d861344987a55b99ae28d00e512d3d4d785bd47c4b
4d829636f1a0990a5b8566a75e1cfa9221b3434d94d2606e6879d66608456388

Total reclaimed space: 32B

查看容器元数据

$ sudo docker inspect 626ec0eeb370

运行一个web应用

接下来让我们尝试使用 docker 构建一个 web 应用程序。

我们将在docker容器中运行一个 Python Flask 应用来运行一个web应用。

$ sudo docker pull training/webapp						#拉取镜像
$ sudo docker run -d -P training/webapp python app.py	#随机端口映射

访问web应用

docker ps命令查看容器,获得端口号

$ sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                   PORTS                     NAMES
9f3b9b5afaf3        training/webapp     "python app.py"     12 seconds ago      Up 10 seconds            0.0.0.0:32768->5000/tcp   nervous_tharp

利用id或名字查看端口

$ sudo docker port 9f3b9b5afaf3
$ sudo docker port nervous_tharp

查看web程序日志

docker logs [ID或者名字] 可以查看容器内部的标准输出。

$ sudo docker logs -f 9f3b9b5afaf3

查看web程序进程

我们还可以使用 docker top 来查看容器内部运行的进程

$ sudo docker top 9f3b9b5afaf3

commit镜像

docker commit  # 提交容器成为新的副本,可以用来保存当前容器状态

# 类似git指令
docker commit -m="提交描述的信息" -a="作者" 容器id  新的镜像名:[TAG]

# 修改镜像版本号tag
docker tag 7853e6064af8 centos-test:7.4.1708

容器数据卷

概念:由于镜像只打包应用和环境,容器数据不可持久化,利用数据卷技术实现目录挂载,将docker容器中的数据同步到本地,容器间也可实现数据共享。

好处:对于容器的修改不需要进入容器,可直接在本地进行

使用方法

使用-v命令

docker run -it -v 主机目录:容器目录    # 可挂载多个目录

# 容器被停止了,主机修改的数据也会被同步到容器

# -e 环境配置  如:设置mysql的密码
docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=c07cfc4ef3a8c096 --name mysql01 mysql


匿名挂载和具名挂载

# 匿名挂载
docker run -d -P --name mysql02 -v /etc/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql


# 具名挂载
docker run -d -P --name mysql03 -v mysql03:/etc/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql

# 通过 docker volume ls 查看
DRIVER              VOLUME NAME
local               3bac2caa6e9bc733a9d3a602ef91ff63ced693a79036972877380544f7ee3abe
local               ca1cd9acd2e96f576956b6980b318cdad7dada13947818bf98955207c1acaa79
local               d1f9e2ccec189ae89f72a066b9a99bd5e37444672b654ae59c5fbe33b2d12473
local               f2a4ccbdf3ceb05e6ddc4a1f293ea0e65af0d8eedfdf6e9d2a8fac49457df117
local               mysql03


# 区分
-v /容器内路径         	  # 匿名挂载
-v 数据卷名:/容器内路径	   # 具名挂载
-v /主机路径:/容器内路径	   # 指定路径挂载

#扩展
容器内路径:ro/rw  
ro	#readonly  只读,只能通过主机操作
rw	#readwrite 可读可写,默认

DockerFile

指令

FROM				# 基础镜像,如centos
MAINTAINER			# 镜像作者:姓名+邮箱
RUN					# 构建镜像的时候需要的命令
ADD					# 添加镜像,如tomcat
WORKDIR				# 镜像的工作目录
VOLUME				# 挂载的目录
EXPOSE				# 端口配置
CMD					# 指定容器启动时运行的命令
ENTRYPOINT 			# 指定容器启动时运行的命令,可追加
ENV					# 构建的时候设置环境变量

Docker网络

自定义网络

# 查询网络
docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
570ecf3acbaa        bridge              bridge              local
c1b486d234a3        host                host                local
5a457db59398        none                null                local

# 网络模式
bridge:桥接网络(默认)
none:不配置网络
host:与宿主机共享网络

# --link只能单向ping通

#自定义桥接网络
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值