docker pull nginx
docker images
docker save -o [保存的目标文件名称] [镜像名称]
例:
docker save -o nginx.tar nginx:latest
docker rmi nginx:latest
docker load -i nginx.tar
docker run --name mn -p 80:80 -d nginx
命令解读:
docker run :创建并运行一个容器
--name : 给容器起一个名字,比如叫做mn
-p :将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
-d:后台运行容器
nginx:镜像名称,例如nginx
这里的-p
参数,是将容器端口映射到宿主机端口。
默认情况下,容器是隔离环境,我们直接访问宿主机的80端口,肯定访问不到容器中的nginx。
现在,将容器的80与宿主机的80关联起来,当我们访问宿主机的80端口时,就会被映射到容器的80,这样就能访问到nginx了:
docker logs -f?[容器的名字]
添加? -f 参数可以持续查看日志
docker ps
加上 -a 查看所有的容器包括已经停止的。
docker -f?rm 容器名字
加-f 强制删除
docker exec -it mn bash
命令解读:
docker exec :进入容器内部,执行一个命令
-it : 给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互
mn :要进入的容器的名称
bash:进入容器后执行的命令,bash是一个linux终端交互命令
exit
docker pause 容器名字或者ID
docker unpause 容器名字或者ID
docker stop 容器名字或ID
docker start 容器名字或ID
docker volume create 数据卷名字
docker volume ls
docker volume inspect 数据卷名字
docker volume rm 数据卷名字
docker volume prune
docker run --name mn -v html:/usr/share/nginx/html -p 80:80 -d nginx
镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成。
以MySQL为例,镜像的组成结构:
简单来说,镜像就是在系统函数库、运行环境基础上,添加应用程序文件、配置文件、依赖文件等组合,然后编写好启动脚本打包在一起形成的文件。
构建java项目的镜像,可以在已经准备了JDK的基础镜像基础上构建。
需求:基于java:8-alpine镜像,将一个Java项目构建为镜像
步骤:
① 新建一个空的目录docker-demo,然后在目录中新建一个文件,命名为Dockerfile
② 拷贝Java项目的jar包到这个docker-demo目录中
③ 编写Dockerfile文件:内容如下:
# 指定基础镜像
FROM java:8-alpine
# 将app.jar拷贝到镜像中
COPY ./docker-demo.jar /tmp/app.jar
# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar
④ 进入docker-demo目录中,使用docker build命令构建镜像 (注意后面有个“点”)javaweb:2.0是创建的镜像的名字和版本,此后镜像就创建好了,可以docker images查看。
?docker build -t javaweb:2.0 .
⑤ 使用docker run创建容器并运行
docker run --name web -p 8090:8090 -d javaweb:2.0
?Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器!
Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。
Compose文件格式如下:
它是个yml文件:
上面的Compose文件就描述一个项目,其中包含两个容器:
mysql:一个基于mysql:5.7.25
镜像构建的容器,并且挂载了两个目录
web:一个基于docker build
临时构建的镜像容器,映射端口是8090
DockerCompose的详细语法参考官网:Overview | Docker Docs
其实DockerCompose文件可以看做是将多个docker run命令写到一个文件,只是语法稍有差异。
第一种:在github下载,比较慢。
# 安装
curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
第二种:
链接:https://pan.baidu.com/s/1Cl9AasCAMmxSu-ICTDZvAQ?pwd=8j3o?
提取码:8j3o
上传到/usr/local/bin/
目录
chmod +x /usr/local/bin/docker-compose
curl -L https://raw.githubusercontent.com/docker/compose/1.29.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
如果这里出现错误,需要修改自己的hosts文件:
echo "199.232.68.133 raw.githubusercontent.com" >> /etc/hosts
可以通过命令: docker-compose logs -f 查看所有日志。若后面跟上服务名,查看服务的日志。
我们的私服采用的是http协议,默认不被Docker信任,所以需要做一个配置:
# 打开要修改的文件
vi /etc/docker/daemon.json
# 添加内容,地址是私有镜像仓库的地址 注意是否要添加逗号:
"insecure-registries":["http://192.168.88.128:8080"]
# 重加载
systemctl daemon-reload
# 重启docker
systemctl restart docker
这里添加的内容中的地址就是虚拟机的ip 和仓库的端口。添加时注意逗号。
首先创建一个文件夹例如:
然后在里面创建文件:docker-compose.yml
里面添加内容:
version: '3.0'
services:
registry:
image: registry
volumes:
- ./registry-data:/var/lib/registry
ui:
image: joxit/docker-registry-ui:static
ports:
- 8080:80
environment:
- REGISTRY_TITLE=传智教育私有仓库
- REGISTRY_URL=http://registry:5000
depends_on:
- registry
在文件夹中,运行这个docker-compose文件:
docker-compose up -d
就可以在:ip地址:8080端口? (私有仓库的地址)? 打开了
里面还没有镜像。
推送镜像到私有镜像服务必须先tag,步骤如下:
意思就是给镜像重命名:
① 重新tag本地镜像,名称前缀为私有仓库的地址:192.168.88.128:8080/
docker tag nginx:latest 192.168.88.128:8080/nginx:1.0
② 推送镜像
docker push 镜像名字:版本
③ 拉取镜像
docker pull?镜像名字:版本