Docker说明(一)
常用的docker需要的网站:
Docker官网: https://www.docker.com/
Docker中文社区: http://www.docker.org.cn/
Docker HUB: https://hub.docker.com/
Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、 bare metal、OpenStack 集群和其他的基础应用平台。 Docker 提供了一个可以运行你的应用程序的封套(envelope),或者说容器它原本是 dotCloud 启动的一个业余项目,并在前些时候开源了。它吸引了大量的关注和讨论,导致 dotCloud 把它重命名到 Docker Inc。它最初是用 Go 语言编写的,它就相当于是加在 LXC(LinuX Containers,linux 容器)上的管道,允许开发者在更高层次的概念上工作。
Docker也是一个云计算平台,它利用Linux的LXC、AUFU、Go语言、cgroup实现了资源的独立,可以很轻松的实现文件、资源、网络等隔离,其最终的目标是实现类似PaaS平台的应用隔离。
Docker 会像一个可移植的容器引擎那样工作。它把应用程序及所有程序的依赖环境打包到一个虚拟容器中,这个虚拟容器可以运行在任何一种 Linux 服务器上。这大大地提高了程序运行的灵活性和可移植性,无论需不需要许可、是在公共云还是私密云、是不是裸机环境等等。
Docker通常用于如下场景:
- web应用的自动化打包和发布;
- 自动化测试和持续集成、发布,CI/CD 持续集成/持续部署 ;
- 在服务型环境中部署和调整数据库或其他的后台应用;
- 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
底层技术
码头工人写在GO编程语言并利用Linux内核的几个特性来交付其功能。Docker使用了一种叫做namespaces若要提供称为集装箱。运行容器时,Docker将创建一组命名空间为了那个容器。这些命名空间提供了一层隔离。容器的每个方面运行在单独的名称空间中,其访问权限仅限于该名称空间。
Docker与虚拟机区别
传统虚拟机 | Docker |
---|---|
依赖物理CPU和内存,是硬件级别的。 | 在操作系统上,利用操作系统的containerization( 集装箱化) 技术,可以在虚拟机上运行。 |
一般都是指操作系统镜像,比较复杂。 | docker开源而且轻量,称为“容器”,单个容器适合部署少量应用。 |
使用快照来保存状态。 | 引入了类似源代码管理机制,将容器的快照历史版本一一记录。 |
在构建系统的时候较为复杂,需要大量的人力。 | docker可以通过Dockfile来构建整个容器,重启和构建速度很快。更重要的是Dockfile可以手动编写,这样应用程序开发人员可以通过发布Dockfile来指导系统环境和依赖,这样对于持续交付十分有利。 |
Docker特性
文件系统隔离 | 每个进程容器运行在完全独立的根文件系统里 |
---|---|
资源隔离 | 可以使用cgroup为每个进程容器分配不同的系统资源,例如CPU和内存 |
网络隔离 | 每个进程容器运行在自己的网络命名空间里,拥有自己的虚拟接口和IP地址 |
写时复制 | 采用写时复制方式创建根文件系统,这让部署变得极其快捷,并且节省内存和硬盘空间。 |
日志记录 | Docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索。 |
变更管理 | 容器文件系统的变更可以提交到新的映像中,并可重复使用以创建更多的容器。无需使用模板或手动配置。 |
交互式shell | Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互shell。 |
Docker 工作原理
Docker 使用客户端-服务器 (C/S) 架构模式。Docker 客户端会与 Docker 守护进程进行通信。Docker 守护进程会处理复杂繁重的任务,例如建立、运行、发布你的 Docker 容器。Docker 客户端和守护进程可以运行在同一个系统上,当然你也可以使用 Docker 客户端去连接一个远程的 Docker 守护进程。Docker 客户端和守护进程之间通过 socket 或者 RESTful API 进行通信。
Docker 守护进程 | Docker 守护进程运行在一台主机上。用户并不直接和守护进程进行交互,而是通过 Docker 客户端间接和其通信。 |
---|---|
Docker 客户端 | Docker 客户端,实际上是 docker 的二进制程序,是主要的用户与 Docker 交互方式。它接收用户指令并且与背后的 Docker 守护进程通信,如此来回往复。 |
Docker内部组件
Docker 镜像 - Docker images
Docker 仓库 - Docker registeries
Docker 容器 - Docker containers
docker类型 | 说明 |
---|---|
Docker镜像 | Docker 镜像是 Docker 容器运行时的只读模板,每一个镜像由一系列的层 (layers) 组成。Docker 使用 UnionFS 来将这些层联合到单独的镜像中。UnionFS 允许独立文件系统中的文件和文件夹(称之为分支)被透明覆盖,形成一个单独连贯的文件系统。正因为有了这些层的存在,Docker 是如此的轻量。当你改变了一个 Docker 镜像,比如升级到某个程序到新的版本,一个新的层会被创建。因此,不用替换整个原先的镜像或者重新建立(在使用虚拟机的时候你可能会这么做),只是一个新 的层被添加或升级了。现在你不用重新发布整个镜像,只需要升级,层使得分发 Docker 镜像变得简单和快速。 |
Docker 仓库 | Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。同样的,Docker 仓库也有公有和私有的概念。公有的 Docker 仓库名字是 Docker Hub。Docker Hub 提供了庞大的镜像集合供使用。这些镜像可以是自己创建,或者在别人的镜像基础上创建。Docker 仓库是 Docker 的分发部分。 |
Docker 容器 | Docker 容器和文件夹很类似,一个Docker容器包含了所有的某个应用运行所需要的环境。每一个 Docker 容器都是从 Docker 镜像创建的。Docker 容器可以运行、开始、停止、移动和删除。每一个 Docker 容器都是独立和安全的应用平台,Docker 容器是 Docker 的运行部分。 |
容器特点
- 灵活:即使最复杂的应用程序也可以容器化。
- 轻量级:容器利用并共享了主机内核,在系统资源方面比虚拟机更加有效。
- 可移植性:您可以在本地构建,部署到云并在任何地方运行。
- 松散耦合:容器是高度自给自足并封装的容器,使您可以在不破坏其他容器的情况下更换或升级它们。
- 可扩展:您可以在数据中心内增加并自动分布容器副本。
- 安全:容器将积极的约束和隔离应用于流程,而无需用户方面的任何配置。
Docker安装(二)
登陆到 清华大学开源软件站 下载docker的相关镜像。
可以看到docker-ce.repo 右键->复制链接地址 在Linux中的下载此文件到/etc/yum.repo.d目录下
在网页上点击进入目录或者直接访问此仓库地址可以查看此仓库中是否有我们需要的版本
https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/x86_64/stable/Packages/
- 安装 Docker Engine-Community
yum install -y yum-utils device-mapper-persistent-data lvm2
wget https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo --no-check-certificate
刚才下载的docker-ce.repo可以看到系在地址指向并非清华大学镜像仓库,因此我们需要替换为清华大学镜像地址(替换是为了速度下载速度快一些)
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 添加稳定的yum源头
yum list docker-ce --showduplicates | sort -r 安装特定的yum源头
yum -y install docker-ce-18.06.3.ce-3.el7
yum -y install docker
docker -v
systemctl status docker
systemctl start docker
systemctl enable docker
systemctl list-unit-files | grep docker 查看docker是否是在自启动的状态
docker指令
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? 出现这个指定的话说明docker没有运行
docker -h 是查看所有的指令操作
[root@localhost ~]# ll /var/run/docker.sock
srw-rw----. 1 root docker 0 Nov 4 22:54 /var/run/docker.sock
docker info 查看系统信息
docker run 是核心的命令
docker search hello-world 是查找镜像的命令
docker pull hello-world 是下载镜像的命令,默认的话是从docker-hub上面下载 :latest表示的是最新的版本
然后通过docker images 来查看相关的镜像的下载情况,想象成一个光盘就行
开始运行一个新的容器 docker run hello-world
docker ps -a 容器运行完之后看一下相关的状态 -a表示的是所有的进程,一种是已经停止的,一种是正在运行的。
docker -i 交互模式
docker -t 分配一个终端
docker -d 后台运行
docker -name 指定容器的名称
例如下载一个nginx
docker search docker 查找相关的镜像源头
docker pull nginx 意思是下载镜像
docker run --name mywebserver -it nginx
docker ps
平时的docker的过程 :
docker pull: 后面会跟一个版本号,latest 表示的是最新版本的
docker run hello-world 运行镜像然后自动就退出了
docker ps -a 看所有的镜像的内容
运行容器
-i 交互模式
-t 分配一个终端
-d 后台运行
-p 端口绑定
-none 指定容器的名称
1-后台运行容器
--name 的记得更改名称
docker run --name mywebserver01 -itd nginx
2-删除容器
rm 强制删除容器 docke rm mywebserver
或者通过指令id来删除 docker rm 39cdda5b4d41
后台来运行的 docker run --name mywebserver -itd nginx 后台运行的
docker info 查看相关的信息等操作
容器的生命周期
下载镜像 docker pull hello-world
查看本地镜像 docker images
run 运行容器 -i交互模式 -t分配一个终端 -d指定容器名称
容器相关的命令
ps 查看容器的运行状态,正在运行,已经停止的
docker ps
docker ps -a
docker run [options]
docker run hello-world
docker run --name mywebserver -itd nginx
docker attach webserver 展示输出日志信息
docker diff webserver 容器发生变化就会通过这个来查看
容器控制 start/restart /stop/stats
docker ps 看docker进程状态等
docker stop mywebserver
docker start mywebserver
docket stats mywebserver
info 系统信息
docker info 显示容器信息
docker logs mywebserver 查看相关的日志信息
logs 查看容器的日志 (-f 动态的分析)
docker pause mywebserver
docker ps 可以看到stats 是暂停的(paused)
docker unpause mywebserver 取消暂停
rename 重命名 docker rename -h
docker rename mywebserver webserver
看下docker的重命名为docker rename mywebserver webserver
docker inspect webserver 查看所有的docker 的信息
显示所有的详细信息
history 历史记录
镜像的操作
查看镜像的更新历史
docker history nginx
docker ps
docker ps -a 查看进程
关闭容器进程 docker kill webserver
查看容器运行的进程 docker top webserver
top 查看容器进程
docker top webserver
info 系统信息
docker port -h 查看端口信息
docker port webserver 绑定端口信息
进入相关的容器链接
exec 连接容器执行命令
docker exec -it mywebserver bash
curl 127.0.0.1 要登录到相关的容器里面 连接到里面
docker stop webserver
docker rm webserver
docker rmi webserver
执行相关的操作,如何外部才可以进行访问,-p相关的访问
docker run --name webserver -p 8000:80 -itd nginx
docker port webserver 查看端口相关信息
80/tcp -> 0.0.0.0:8000
curl 127.0.0.1:8000 就访问到相关的nginx里面了
port 显示相关端口信息
复制服务器里面的内容到容器里面
docker run itd --name webserver nginx
docker restart webserver 重启容器
docker ps 看下相关的进程在不在
文件复制,从容器和从外部直接复制
[root@localhost ~]# docker cp /etc/hosts webserver:/tmp
[root@localhost ~]# docker exec -it webserver ls /tmp
hosts
[root@localhost ~]# docker cp webserver:/tmp/hosts ./
[root@localhost ~]# ls
anaconda-ks.cfg hosts
打包相关的镜像文件,导出镜像文件到本地
[root@localhost ~]# docker export -o test.tar webserver
login/logout docker registry
注册一个账号 docker hub 账号 ,这里选择一个选择一个免费的版本
邮件激活
login in 创建一个仓库
login login 登陆相关的网站 注册一个相关的账户信息等
镜像操作
docker pull centos:7 下载镜像
docker images 查看镜像操作等
tag 重命名操作
docker tag hello-world:latest devopsvip/docker:latest
docker push 上传到镜像仓库里面
docker push devopsvip/docker:latest 上传相关的应用
无法上传docker镜像
docker login
commit 提交一个新的变化
docker pull devopsvip/docker:latest 下载镜像信息
docker images
docker login 登陆到里面就行了
docker commit -h
docker history
docker commit -h 看下使用方法
docker history devopsvip/docker
docker commit -o 'devopsvipxx' devopsvip/docker
docker restart webserver
docker commit -o "devopsvipxx" webserver
docker history webserver
docker build 构建镜像
Dockerfile
里面写内容为 FROM webserver 这个镜像来操作
docker build -t devopsvip/docker:v1 .
docker images 查看镜像的相关操作是否是正常的
Docker指令容器
docker -h 查看所有的指令
docker version 看版本信息
docker info 看系统信息
docker run
docker search hello-word 查看镜像
docker pull hello-world 下载镜像(默认的是docker hub)
docker images 查看镜像信息
docker run hello-world 启动一个镜像
docker ps -a 检查所有的进程 一种是正在运行的,一种是已经停止的
run 运行容器
-i: 交互模式
-t: 分配一个终端
-name 指定容器的名称
下载一个nginx docker pull nginx
docker run --name mywebserver01 -itd nginx
删除容器 docker rm mywebserver
docker run --name mywebserver -itd nginx 后台运行方式
docker ps 看进程是否在运行等
docker stop mywebserver 停止镜像
docker ps 查看进程状态
docker start mywebserver 开启镜像
docker restart mywebserver 重启该容器操作
docker logs mywebserver 查看日志 加-f (动态日志显示)
docker pause mywebserver 暂停容器
docker unpause mywebserver 开始容器操作
docker rename -h 看使用名称
docker rename mywebserver webserver 重命名该名称
docker ps 看相关的状态信息
docker inspect webserver 查看容器的信息等
docker kill webserver 杀掉停止容器操作,关闭容器进程
docker top webserver
docker top webserver 7153 看相关的进程状态
docker ps -a 看docker的状态
docker port -h
docker port webserver
docker exec -it webserver bash 在容器里面执行命令
ls 执行命令,查看相关的命令状态
docker rm webserver 删除镜像
映射端口
docker stop webserver
docker rm webserver
docker run --name webserver -p 8000:80 -itd nginx 把相关的端口映射到80端口 实现外部的访问
curl 127.0.0.1:8000 可以看相关的nginx的界面
docker port webserver 可以查看端口变化了已经
docker attach webserver 可以输出相关的日志信息什么
port 显示容器端口的信息
docker port webserver
拷贝相关的文件信息
docker cp /etc/hosts webserver:/tmp
docker exec -it webserver ls /tmp 执行相关的命令步骤
docker diff webserver 查看不同,容器发生变化都会通过这个知道
docker cp webserver:/tmp/hosts ./ 把容器里面的内容复制到本地
docker events webserver
login 登陆
logout 注销
注册docker hub 登陆网址:https://hub.docker.com/
登陆docker hub 输入命令docker login
登出命令的话是 docker logout 是登出的命令
Docker镜像指令
docker history (webserver)nginx 查看镜像历史命令
docker history(webserver )nginx 1191 查看进程号信息
镜像导出
docker export -o test.tar webserver 将webserver镜像导出
docker pull centos:7 将centos7的镜像下载下来进行操作
docker images 查看下载镜像的信息等操作
给镜像增加一个新的标签,改名字操作
docker tag hello-world:latest hhdocker123/docker:latest 增加新的镜像操作
docker images 查看下载镜像的信息
下载私有的仓库的内容和信息等
docker push hhdocker123/docker:latest
登陆 docker login
docker push hhdocker123/docker:latest 将镜像上传到私有的仓库
删除镜像
docker images
docker rmi devopsvip/docker:latest 把本地的镜像删除掉 rmi删除镜像
docker rmi hhdocker123/docker:latest
docker images
docker pull hhdocker123/docker:latest 下载镜像的操作 把镜像下载下来
执行 docker logout 如果想要在下载的话,需要重新的登陆上去
docker history hhdocker123/docker 查看历史的命令信息
更改提交images
docker restart webserver
docker commit -a "devopsvipxx" webserver
docker inspact webserver 查看所有的属性信息啥
将容器变成镜像 用commit 这个语句来运行
Docker镜像构建
Dockerfile FROM nginx
docker build . 如果是在当前的目录下面
docker build -f aa/Dockerfile . 如果是在不同的目录下面
docker build -t webserver:v2 指定标签的名称为v2 的名称
docker import test.tar webserver:v2 导入压缩文件到镜像
docker history webserver:v2 查看相关的历史记录
docker save -h
docker load -h
docker save -o webserver-v2.tar webserver:v2 将镜像的的包导出下来
docker rmi webserver:v2 删除镜像
docker load -i webserver-v2.tar 加载相关的镜像
load 通过归档文件加载镜像
save 将镜像保存下来
scp webserver-v2.tar root@192.168.1.200:/tmp 将镜像远程
docker images|grep webserver 查看相关的镜像信息
docker create --name webnewserver nginx 创建一个新的容器
docker ps -a 看容器的进程等
docker start webnewserver
docker update --cpu-quota 1000 webnewserver 更改cpu
docker update --cpus 2 webnewserver
docker update --cpus 3 webnewserver 设置cpu的数量
docker ps -a
docker ps
docker inspect webnewserver
docker stats webserver 看内存的状态信息等
docker update --memory 1G --memory-swap 1G webserver
Docker前端项目容器化
-------------------手工来部署
下载相关的镜像
git clone https://github.com/dockersamples/node-bulletin-board
git config --global http.postBuffer 20000000
git config --global http.postBuffer 50M
安装npm
Linux 上安装 Node.js
直接使用已编译好的包Node 官网已经把 linux 下载版本更改为已编译好的版本了
我们可以直接下载解压后使用:
# wget https://nodejs.org/dist/v10.9.0/node-v10.9.0-linux-x64.tar.xz
# tar xf node-v10.9.0-linux-x64.tar.xz // 解压
# cd node-v10.9.0-linux-x64/ // 进入解压目录
# ./bin/node -v // 执行node命令 查看版本
v10.9.0
解压文件的 bin 目录底下包含了 node、npm 等命令,
我们可以使用 ln 命令来设置软连接:
ln -s /usr/software/nodejs/bin/npm /usr/local/bin/
ln -s /usr/software/nodejs/bin/node /usr/local/bin/
cd cd /root/newdocker/node-bulletin-board/bulletin-board-app
npm init -y
vi package.json
"private": true
npm install 安装 npm 需要的包和软件
npm start
然后访问 http://192.168.1.10:8080/ 可以看到前端的页面了
---------------使用docker来部署
编写dockerfile
FROM node:current-slim #基础的镜像
WORKDIR /usr/src/app #指定工作目录
COPY package.json . #复制package.json文件
RUN npm install #进行安装
EXPOSE 8080 #绑定端口
CMD [ "npm", "start" ] #执行相关的命令运行 npm start
COPY . . # 复制当前目录内容
vim /etc/sysctl.conf
#配置转发
net.ipv4.ip_forward=1
#重启服务,让配置生效
systemctl restart network
systemctl restart docker 重启docker进程
docker build . 执行
docker build -t bulletion:1.0 . 执行相关的标签和名称,生成一个镜像
[root@localhost app]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
bulletion 1.0 d04e4ac85e57 8 minutes ago 260MB
可以看到相关的容器已经挂载到上面了
然后开始运行,镜像生成了就可以运行了
镜像的实例化,创建容器
docker run -itd --name bb - p 8000:8080 bulletion:1.0
后台运行,然后想外部的8000端口绑定到8080端口上面运行
[root@localhost app]# docker run -itd --name bb -p 8000:8080 bulletion:1.0
8092fd91163be2f41eb68e1bdfbcc4a906da3fa46edc5b2688844061638d89a4
[root@localhost app]# docker ps
然后访问 http://192.168.1.10:8000/ 可以看到前端的页面了
删除镜像删除容器操作--------
docker stop bb
docker rm bb
docker rmi bulletin:1.0
docker rm --force bb
docker rmi bulletin
上传Docker镜像
登陆dockerhub 创建一个仓库,hhdocker123/bulletion:1.0 为共有的属性
然后 docker images 查看相关的镜像名称
docker 通过 tag来更改名字 docker tag bulletion:1.0 hhdocker123/bulletion:1.0
docker push hhdocker123/bulletion:1.0 将镜像上传到仓库里面
记得docker login 可以自己进行验证了
Docker资源管理
[root@localhost ~]# docker version
docker plugin 管理插件
docker system
docker config ls
docker system info
docker system df 检查docker的磁盘的使用
docker builder 构建镜像,清除构建缓存
docker container 容器管理命令
docker network ls
创建数据
docker ps
docker exec -itd bb bash 进入到bb容器里面进行操作
docker volume create --name myvolume 创建一个我的卷
docker volume ls 查看数据卷的格式
docker volume inspect myvolume 查看卷组的模式信息情况
##将卷挂载给容器
docker run -itd --name bb -v myvolume:/data:rw bulletion:1.0
docker exec -it bb bash 进入到bb容器中进行操作
mkdir data 进入到该目录下面
echo 1234 > 12.txt
exit
docker stop bb 停掉相关bb的容器操作
docker start bb 开启容器
docker exec -it bb bash 进入到容器里面
cd data && ls
可以看到相关的12.txt 还是存在的,可以持久的保存下来
exit 退出容器操作
docker rm --force bb 可以把bb容器给删除掉
docker images
docker run -itd --name bb bulletion:1.0
docker exec -it bb bash
ls 数据丢失了,可以看到删除容器数据丢失
exit
docker rm --force bb 删除容器就可以了
-----可以发现删除容器,就是数据就没有了
docker volume ls 查看目前所有的卷
docker volume create --name myvolume
docker volume inspect myvolume 查看相关的卷组信息等
cd /var/lib/docker/volumes/myvolume/_data 可以看到这个路径
echo 11111 > a.txt 创建一个卷和一个数据
docker run -itd -v myvolume:/data:rw bulletion:1.0 挂载卷组空间
docker run -itd --name bb -v myvolume:/data:rw bulletion:1.0
docker exec -it bb bash
cd data/
ls
cat a.txt
exit
docker volume ls
docker volume inspect myvolume
cd /var/lib/docker/volumes/myvolume/_data/ 可以看到下面的数据也发生了改变,和登陆容器里面的一样 ,就是把卷挂到容器里面去生成的文件信息等。
mkdir /data/test
echo 1234 > /data/test/a.txt
exit
docker rm --force bb
可以看到/var/lib/docker/volumes/myvolume/_data 该路径下面的数据还在的
然后在启动一个新的
docker run -itd --name bb -v myvoume:/data:rw bulletion:1.0
docker exec -it bb bash
通过自定义相应的路径来进行挂载
docker run -itd --name cc -v /tmp/test:/data:rw bulletion:1.0
cd /tmp/test/
ls
echo 111 > a.txt
ls
docker exec -it cc bash
另外的一种说法是通过这种方式来进行操作,自定义路径
docker run -itd --name cc -v /tmp/test:/data:rw bulletion:1.0
docker ps
Docker 网络管理
交换机:数据帧传输
路由器:网关
docker pull centos:7 下载相关的镜像
docker run -itd --name centos centos:7
docker exec -it centos bash
yum -y install net-tools*
ifconfig 查看该容器的ip信息
inet 172.17.0.4 netmask 255.255.0.0 可以看到跟docker0的ip是一个网段的,是一个桥接的网络信息
通过命令
[root@localhost ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
aaf66f6e9cb2 bridge bridge local
e391895656a0 host host local
8d7d59eb08aa none null local
[root@localhost ~]# ping 172.17.0.4
PING 172.17.0.4 (172.17.0.4) 56(84) bytes of data.
64 bytes from 172.17.0.4: icmp_seq=1 ttl=64 time=0.092 ms
64 bytes from 172.17.0.4: icmp_seq=2 ttl=64 time=0.070 ms
容器和容器之间也是可以通的是桥接的模式滴
------------通过划分vlan来区分来相关的作用
docker network -h
docker network create mynet
docker network create mynet2
docker network ls
docker run -itd --name centos01 --net mynet centos:7
docker run -itd --name centos02 --net mynet2 centos:7
docker exec -it centos bash 执行相关的命令操作
docker network connect mynet centos
docker exec -it centos bash
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.18.0.3 netmask 255.255.0.0 broadcast 172.18.255.255
ether 02:42:ac:12:00:03 txqueuelen 0 (Ethernet)
RX packets 8 bytes 656 (656.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
编写Dockerfile
docker build .
-f 指定dockerfile的位置
-t 指定镜像的名称
格式:
指令是不区分大小写滴,推荐大写,docker会按照顺序执行每一条命令。
一个dockerfile 必须是通过from进行开始进行的
#号是注释滴意思
------指令
env:表示滴是环境变量,声明容器里面的环境变量的
第一个dockerfile
# vi Dockerfile
From centos:7
Env name zhangsan
USER $(name)
#docker build .
----
run指令-----------
FROM centos:7
RUN /bin/bash -c 'source $HOME/.bashrc;echo $HOME'
RUN ["/bin/bash","-c","echo hello"]
docker build .
docker build -t customtest:v1 . --no-cache 创建一个镜像
docker image history customtest:v1 可以看到该镜像的执行历史
cmd指令-----------
FROM centos:7
RUN /bin/bash -c 'source $HOME/.bashrc;echo $HOME'
RUN ["/bin/bash","-c","echo hello"]
CMD ls
CMD ["/bin/bash","-c","mkdir ./test"]
docker ps -a |grep custom
docker run -it customtest:v1
#标签 ,LABEL lang='Java' version="1.0" appname='myservice'
docker build -t custometest:v1 . --no-cache
docker image inspect custometest:v1 #看到镜像的详细
#暴露,通过docker指定相关的端口信息
expose 暴露端口,是唯一滴一个协议
EXPOSE 80/tcp
EXPOSE 80/udp
docker run -p 80:80/tcp -p 80:80/udp
env 环境变量
docker run --env <key>=<value> 可以替换环境变量的信息
ADD添加文件
复制相关的文件信息
docker build -t custometest:v1 . --no-cache
docker run -it --name myserver customtest:v1 /bin/bash #
docker rm --force myserver 删除容器
docker run -it custometest:v1 /bin/bash #不用写名字可直接删除
FROM centos:7
RUN /bin/bash -c 'source $HOME/.bashrc;echo $HOME'
RUN ["/bin/bash","-c","echo hello"]
CMD ls
#CMD ["/bin/bash","-c","mkdir ./test"]
LABEL lang="Java" version="1.0" appname='myservice'
ADD my.txt /tmp/
ADD mydir/ /tmp/mydir
ADD mytar.tar /home/
ADD mytar.tar.gz /home/ 带有一定的解压功能的
docker build -t myserver:v1 -f Dockerfile2 . 通过另外一个文件来进行相关下载
--VOLUME
FROM centos:7
RUN mkdir /myvol
RUN echo "hello world" > /myvol/greeting
VOLUME /myvol
volume.dockerfile
docker build -t myserver:v1 -f volume.dockerfile . #命
令 构建容器
默认是 docker build -t myserver:v1 . 可以直接的执行
docker run -it --rm myserver:v1 进行相关文件的删除
RUN useradd testuser
USER testuser
RUN useradd -u 1009 testuser
USER 1009
--workdir 工作目录是容器中的目录
WORKDIR /path/to/workdir
构建nginx镜像
FROM centos:7
RUN yum -y install nginx
网友评论