ubuntu16.04下docker的入门学习
一、虚拟机
这里我使用的是VMWare 15的虚拟机软件,Linux版本使用了ubuntu16.04 TLE版本,建议去阿里云下载ubuntu的镜像,启动后默认就可以了,之后所有的操作都以最高权限操作,输入sudo su
进行切换。不过这里需要注意的是刚开始系统的apt源是国外的,所以使用apt update
时会报错,所以需要在设置里先修改到国内源。后面也可以进入/etc/apt/source.list
下进行国内源的添加,这些网上有很多,这里就不阐述了。
二、docker 的安装
1、更新apt库
1 | sudo apt update |
2、以下安装使得允许apt通过HTTPS使用存储库
1 | sudo apt install apt-transport-https ca-certificates curl software-properties-common |
3、添加阿里GPG秘钥
1 | curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - |
4、添加阿里docker源
1 | sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" |
5、更新apt源
1 | sudo apt-get update |
6、安装
1 | sudo apt install -y docker-ce |
7、查看版本
1 | docker --version |
如果成功安装就会显示docker的版本号,另外,为了加快docker镜像的拉取,我们也需要修改docker源
8、更换docker源
以下是国内可用的镜像源
1 | Docker 官方中国区:https://registry.docker-cn.com |
增加Docker的镜像源配置文件 /etc/docker/daemon.json,如果没有配置过镜像该文件默认是不存的,在其中增加如下内容:
1 | { |
其中的URL就是指定的镜像源,可以将其设置为上面说的四个镜像源中的任何一个。
然后重启Docker服务:
1 | service docker restart |
然后通过以下命令查看配置是否生效:
1 | docker info|grep Mirrors -A 1 |
可以看到如下的输出:
1 | Registry Mirrors: |
就表示镜像配置成功,然后再执行docker pull操作,就会很快了。可以使用 docker run hello-world
来验证是否成功
三、docker常用命令
1、查看docker 当前版本
1 | docker version |
2、启动与停止
安装完成Docker后,默认已经启动了docker服务,如需手动控制docker服务的启停,可执行如下命令
1 | # 启动docker |
3、查看所有镜像
1 | sudo docker image ls |
- REPOSITORY:镜像所在的仓库名称
- TAG:镜像标签
- IMAGEID:镜像ID
- CREATED:镜像的创建日期(不是获取该镜像的日期)
- SIZE:镜像大小
4、拉取镜像
1 | sudo docker image pull 镜像名称:版本号 # 不指定版本默认为最新版 |
5、删除镜像
1 | sudo docker image rm 镜像名称/镜像ID |
6、创建容器(必须现有镜像,才能创建运行容器)
1 | sudo docker run [option] 镜像名 [向启动容器中传入的命令] # 创建容器 |
常用可选参数说明:
- -i 表示以“交互模式”运行容器
- -t 表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即 分配一个伪终端。
- –name 为创建的容器命名
- -v 表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录,即 宿主机目录:容器中目录),可以使 用多个-v 做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后 共享到容器上。
- -d 在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不 会自动登录容器,如果只加-i -t 两个参数,创建后就会自动进去容器)。
- -p 表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p 做多个端口映射
- -e 为容器设置环境变量
- –network=host 表示将主机的网络环境映射到容器中,容器的网络与主机相同
- -it 创建一个伪终端交互界面,name指定容器名称
7、查看所有容器
1 | sudo docker container ls #查看所有正在运行的容器 |
查看容器
- container id 容器id
- image 镜像名称
- command 创建后运行的命令
- created 创建时间
- status 关闭时间
- ports 绑定的端口
- names 容器名称
8、创建一个守护式容器
如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器。在容器内部exit退出时,容器也不会停止。即正常来说,进入交互伪终端后输入exit容器也会对应关闭,但是加了-d 内部使用exit也不会结束运行
1 | sudo docker run -dit --name=ubuntu2 ubuntu /bin/bash |
9、运行已经开启的容器
1 | sudo docker container exec -it <容器名/id> <运行后使用的第一个命令> |
10、停止与启动容器
Container 可以省略
1 | # 停止一个已经在运行的容器 |
11、删除容器
1 | sudo docker container rm 容器名或容器id |
四、入门(创建自己的docker)
1、建立一个C文件,如下:
1 | #include <stdio.h> |
2、编译
1 | gcc demo.c -o demo -static |
生成可执行文件demo 一定要静态编译,否则会找不到对应的库,报错
3、编辑一个Dockerfile
1 | FROM scratch |
然后把demo和Dockerfile都放在一个目录下
4、进行docker的生成
1 | sudo docker build -t hello:0.1 . |
hello:0.1是名称和Tag,后面的 . 表示当前目录
5、运行
1 | docker run hello:0.1 |
五、举例(基于ubuntu创建python3.8镜像)
1、下载ubuntu16.04基础镜像
1 | docker pull ubuntu:16.04 |
2、运行容器
这里i是指进入交互环境,t指进入终端 , v指的是容器内路径映射到宿主机的某一路径 ,此时PWD我的当前目录已经挂载到容器的/home/root123目录下了
1 | docker run -it -v $PWD:/home/root123 ubuntu:16.04 /bin/bash |
3、安装基本组件
在这里有可能自带的apt源还是国外的,而且没有vi/vim可编辑软件,所以这里用了echo直接更新源
1 | mv /etc/apt/sources.list /etc/apt/sources.list.bak |
在这里可能存在源的问题(我在这里卡了好久,哭),可以进入/etc/apt/sources.list进行源的更换
1 | #阿里云 |
之后依次执行
1 | apt update |
安装python要的基础包
1 | apt-get install zlib1g-dev libbz2-dev libssl-dev libncurses5-dev libsqlite3-dev libreadline-dev tk-dev libgdbm-dev libdb-dev libpcap-dev xz-utils libexpat1-dev |
解压python源码包,可以去官网上下载,这里进行编译安装
1 | tar -zxvf Python-3.8.1.tgz |
1 | ./configure -–with-ssl --prefix=/usr/local/python3 --enable-optimizations |
进行链接,相当于windows的快捷方式
1 | ln -s /usr/local/python3/bin/python3.8 /usr/bin/python3 |
4、定制我们的容器镜像
1 | docker container ls -a #查看所有容器 |
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
OPTIONS说明:
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。
1 | docker commit -m "add vim&source" -a "author" 1db56d541f2c python:1.0 |
5、保存image和container容器
image保存为文件
1 | docker save -o python.tar python:1.0 |
image装载
1 | docker load -input python.tar |
容器导出:
1 | docker export -o python-export.tar c70bf6d6ca45 #这是容器的id |
容器导入:
1 | docker import python-export.tar python:v1.0 |