ubuntu18.04安装docker
# 删除存在的
sudo apt-get remove docker docker-engine docker.io
sudo apt-get update
#安装依赖
sudo apt-get install apt-transport-https \
ca-certificates curl \
software-properties-common
#添加Docker 公共密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
##设置版本库类型(Ubuntu18.04对应版本“bionic“”),软件版本包括三种:** stable、edge、test**
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# 更新系统包索引
sudo apt-get update
# 安装最新版
sudo apt-get install docker-ce
# 验证安装是否成功
sudo docker --version
#启动
sudo systemctl start docker
#开机启动
sudo systemctl enable docker
docker加速配置
第一种
/etc/docker/daemon.json没有就新建,添加写明内容
{"registry-mirrors":["自己注册阿里云找到加速地址"]}
第二种
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://95822026.m.daocloud.io
普通用户打不开docker,添加到docker用户组
sudo usermod -a -G docker zrq
newgrp docker #更新用户组
如果提示get …… dial unix /var/run/docker.sock权限不够
sudo chmod a+rw /var/run/docker.sock
docker命令
docker images 查看本地所有仓库
docker search helow-world 在线查找镜像仓库hello-world
docker pull ubuntu 在线下载ubuntu 镜像
docker image ls 查看本地所有镜像
docker run hello-world 运行镜像
docker ps 查看运行中镜像容器
docker ps -a 查看运行过镜像容器记录
docker ps -aq 查看运行过镜像容器记录的ID
docker run ubuntu 运行镜像
-i 交互式操作 -t 终端
-rm 容器退出后将其容器删除
-d 返回容器的ID
docker run --rm ubuntu 运行后删除容器
docker run -it --rm ubuntu 进入Ubuntu操作系统
exit 退出镜像
docker rm 容器id 删除容器
docker rm `docker ps -aq` 删除所有容器记录
docker rmi 镜像id 删除镜像
docker logs 容器ID 查看后台运行容器的日志
docker stop 容器ID 停止后台运行容器
docker start 容器ID 重新启动容器
容器ID 自定义名称
docker commit 79e7a03388fb zrq/centos-vim
docker运行一个web应用,通过端口映射外部浏览器可以访问
将外部9000口映射到5000口,访问9000即可访问web
docker run -d -p 9000:5000 training/webapp python app.py
docker仓库推送
docker login
docker push zrq1/web 注意zrq1为docker用户名
docker pull zrq1/web 下载仓库
docker私有仓库搭建:
docker
-v 参数
假设我要在docker容器中安装 nginx 软件
nginx软件有网页根目录
root /opt/static/nginx
js
css
这个nginx静态文件,可以放在容器中管理
也可以通过-v参数挂载一个数据
-v 宿主机/opt/staic/nginx 容器/opt/static/nginx
js1 js2 js3 容器中的nginx软件,读取数据时候,通过-v参数,去宿主机读取
1.下载docker 私有仓库镜像
docker pull registry
2.启动私有仓库容器实例
docker run -d \
-p 5000:5000 \
-v /opt/data/registry:/var/lib/registry \
registry
3.检查私有仓库的容器id
docker ps
4.修改本地镜像的tag,便于推送到本地镜像仓库
docker tag 镜像名 10.0.0.10:5000/镜像名
5.修改docker配置文件,因为他默认不让推送非https的镜像
1.找到本地docker文件
vim /etc/docker/daemon.json
2.写入配置
必须注意此文件是json格式!!!注意引号
{"registry-mirrors": ["http://95822026.m.daocloud.io"],
"insecure-registries":["10.0.0.10:5000"]
}
3.将此文件,添加到docker服务脚本中
vim /lib/systemd/system/docker.service
4.写入以下配置,注意!!!,写入到[Service]配置块中,加载此配置文件
[Service]
EnvironmentFile=/etc/docker/daemon.json
5.修改了docker配置文件,重新加载docker
systemctl daemon-reload
6.重启docker服务,使得生效
systemctl restart docker
7.由于重启了docker,所有的容器实例全挂了,因此要打开私有仓库的容器实例
1.docker ps -a 检查私有仓库的容器记录
2. docker start 私有仓库的id
3.此时docker ps 检查 私有仓库服务是否启动
8.推送本地镜像到私有docker仓库
docker push 10.0.0.10:5000/hello-world
9.docker私有仓库提供了API数据可供查看
http://10.0.0.10:5000/v2/_catalog
10.可以测试删除本地镜像,然后从私有仓库拖取镜像
11.完毕。。。
自定制镜像
# 创建文件Dockerfile
touch Dockerfile
vim Dockerfile
# 镜像基础
FROM scratch #制作base image 基础镜像,尽量使用官方的image作为base image
FROM centos #使用base image
FROM ubuntu:14.04 #带有tag的base image
# 版本和信息
LABEL version=“1.0” #容器元信息,帮助信息,Metadata,类似于代码注释
LABEL maintainer=“yc_uuu@163.com"
# 安装环境
#对于复杂的RUN命令,避免无用的分层,多条命令用反斜线换行,合成一条命令!
RUN yum update && yum install -y vim \
Python-dev #反斜线换行
RUN yum install nginx -y
RUN yum install mysql -y
# 文件路径
WORKDIR /root #相当于linux的cd命令,改变目录,尽量使用绝对路径!!!不要用RUN cd
WORKDIR /test #如果没有就自动创建
WORKDIR demo #再进入demo文件夹
# RUN pwd #打印结果应该是 /test/demo
# ADD与COPY
- 优先使用COPY命令
-ADD除了COPY功能还有解压功能
ADD hello / #把本地文件添加到镜像中,吧本地的hello可执行文件拷贝到镜像的/目录
ADD test.tar.gz / #添加到根目录并解压
WORKDIR /root
ADD hello test/ #进入/root/ 添加hello可执行命令到test目录下,也就是/root/test/hello 一个绝对路径
COPY hello test/ #等同于上述ADD效果,只是复制,没有解压
# 变量赋值
ENV 变量名 变量值
修改变量值,即可改变所有引用变量值的操作
ENV MYSQL_VERSION 5.6 #设置一个mysql版本值为5.6
RUN yum install -y mysql-server=“${MYSQL_VERSION}” # 安装5.6的mysql
案例
Dockerfile文件的内容
FROM python:3.7
LABEL maintainer="Chao Yu<yc_uuu@163.com>"
RUN pip install flask
COPY app.py /app/
WORKDIR /app
EXPOSE 8080
CMD ["python","app.py"]
# 构建镜像,执行命令,app.py必须和Dockerfile在一层,“.”代表当前路径
docker build -t zrq/flask-hello-docker .
# 查看自定义的docker镜像
docker images ls