经验整理-12-Docker-1--100-@

https://blog.csdn.net/Y0Q2T57s/article/details/86746724

怎么构建自己的docker镜像

一、布署项目,自建镜像场景:
1、将jar包上传linux服务器,建个本项目目录,把jar放至该目录下,并该目录下创建名为Dockerfile的文件,/usr/local/dockerapp,“
2、在Dockerfile中添加端口配置(还包括java环境配置、启动命令配置、境像名字配置),以下内容

###指定java8环境镜像

FROM java:8

###复制文件到容器app-springboot

ADD docker-springboot-0.0.1.jar /app-springboot.jar

###声明启动端口号

EXPOSE 8080

###配置容器启动后执行的命令

ENTRYPOINT ["java","-jar","/app-springboot.jar"]

使用docker build命令构建镜像:docker build -t docker-springboot-0.0.1 .
# 格式: docker build -t 镜像名称:标签 Dockerfile的相对位置
运行docer容器:docker run -p 8080:8080 docker-springboot-0.0.1 .  (巧记:tp)
重启systemctl restart docker
关闭防火墙  systemctl stop firewalld
192.168.212.215:8080

二、docker pull 镜像名    (先得docker push)

与传统虚拟化技术相比,Docker优点和缺点是哪些,为啥要用它?

一、和传统VM相比,
传统的部署模式是:安装(包管理工具或者源码包编译)>配置>运行
docker的部署模式是:复制>运行
Docker优点:
1、交付物标准化
2、一次构建,多次交付,直接运行docker命令就可以在多个环境布署
3、轻量级隔离,进程的隔离,还能和我们的宿主机共享硬件资源及操作系统(虚拟机是系统级别隔离)
4、节省开支,轻量级,Docker 在操作系统级别进行虚拟化,一个docker只是一个进程,一个系统可以运行上千个容器.。不需要再配置很高额的硬件
在这个过程中,你完全不需要进行任何配置或者修改,因为这个压缩包赋予了你一种极其宝贵的能力:本地环境和云端环境的高度一致!
5、Docker 启动快速属于秒级别。虚拟机通常需要几分钟去启动。
(看下VM:每台虚拟机都需要有自己的操作系统,虚拟机一旦被开启,预分配给它的资源将全部被占用)
当然Docker 也有缺点:Docker 的安全性也更弱(普通用户权限提升为 Root 权限,它就直接具备了宿主机的 Root 权限,进而可进行无限制的操作),高可用和可恢复性差(Docker 对业务的高可用支持是通过快速重新部署实现的。虚拟化具备负载均衡,高可用,容错)

二、和PaaS 比,
你完全不需要进行任何配置或者修改,因为这个压缩包赋予了你一种极其宝贵的能力:本地环境和云端环境的高度一致!
(PaaS 里最核心的打包系统就是它的弱点了)。

Docker架构


客户端→Docker_Host(宿主机)→仓库

容器→镜像→仓库

Docker daemon( Docker守护进程)

Docker daemon是一个运行在宿主机( DOCKER-HOST)的后台进程。可通过 Docker客户端与Docker daemon通信

 

Registry

Docker Registry是一个集中存储与分发镜像的服务。构建完 Docker镜像后,就可在当前宿主机上运行。在其他机器上运行这个镜像,可借助 Docker Registry来复制。

 

Docker容器运行过程,使用原理?

Docker 组件协作运行容器可以分为以下几个过程:

  • Docker 客户端执行 docker run 命令。

  • Docker Daemon 发现本地没有我们需要的镜像。

  • Daemon 从 Docker Hub 下载镜像。

  • 下载完成后,镜像被保存到本地。

  • Docker Daemon 启动容器。
     

Docker安装

Docker 要求 CentOS 系统的内核版本 3.10以上 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。

1、通过 uname -r 命令查看你当前的内核版本

uname -r

  1. 使用 root 权限登录 Centos。确保 yum 包更新到最新。

yum -y update

  1. 卸载旧版本(如果安装过旧版本的话)

yum remove docker docker-common docker-selinux docker-engine

  1. 安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的

yum install -y yum-utils device-mapper-persistent-data lvm2

  1. 设置yum源

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

 

  1. 可以查看所有仓库中所有docker版本,并选择特定版本安装

yum list docker-ce --showduplicates | sort -r

  1. 安装docker

sudo yum install -y docker-ce     #由于repo中默认只开启stable仓库,故这里安装的是最新稳定版18.03.1

  1. 启动并加入开机启动

systemctl start docker

systemctl enable docker

  1. 验证安装是否成功(有client和service两部分表示docker安装启动都成功了)

docker version

 

镜像相关命令

1、搜索镜像 # docker search java

可使用 docker search命令搜索存放在 Docker Hub(这是docker官方提供的存放所有docker镜像软件的地方,类似maven的中央仓库)中的镜像。执行该命令后, Docker就会在Docker Hub中搜索含有 java这个关键词的镜像仓库。

Docker Hub 官网https://hub.docker.com/search?q=java&type=image

2、下载镜像docker pull java:8

使用命令docker pull命令即可从 Docker Registry上下载镜像,执行该命令后,Docker会从 Docker Hub中的 java仓库下载最新版本的 Java镜像。如果要下载指定版本则在java后面加冒号指定版本

 

3、列出镜像使用 docker images命令即可列出已下载的镜像

 

4、删除镜像 使用 docker rmi java 命令即可删除指定镜像

docker rmi d23bdf5b1b1b

阿里镜像加速

详细参考: https://cr.console.aliyun.com/cn-hangzhou/mirrors

 

容器相关命令

启动容器 docker run -d -p 81:80 nginx

在本例中,为 docker run添加了两个参数,含义如下:

-d 后台运行

-p 宿主机端口:容器端口     #开放容器端口到宿主机端口

访问 http://Docker宿主机 IP:81/,将会看到nginx的主界面如下:

 

需要注意的是,使用 docker run命令创建容器时,会先检查本地是否存在指定镜像。如果本地不存在该名称的镜像, Docker就会自动从 Docker Hub下载镜像并启动一个 Docker容器。

 

2. 列出容器用 docker ps命令即可列出运行中的容器

3. 查看容器的信息 docker inspect 3af5513d208e

 

 

 

Docker卸载应用程序

先删除容器,在删除镜像

 

查询容器 

docker ps –a

使用容器id删除容器

docker rm 18e672ecd8ed

查询镜像

docker images

使用镜像id删除镜像

docker rmi d23bdf5b1b1b

 

 

容器管理

进入到容器

docker container exec -it f0b1c8ab3633 /bin/bash

默认情况下软件安装的目录的/ect目录下

Exit 

 

Docker软件

 

停止Docker容器 docker stop  mynginx

 

Nginx安装

  1. 下载Nginx镜像文件

    

docker pull nginx

docker images

 

  1. 创建挂载目录

 

mkdir -p /data/nginx/{conf,conf.d,html,logs}

 

  1. 编写Nginx配置文件

详细参考资料

  1. 启动容器

 

docker run --name mynginx -d -p 80:80  -v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf  -v /data/nginx/logs:/var/log/nginx -d docker.io/nginx

 

6.查看容器

 

docker ps

 

MySQL安装

1.查询mysql版本

docker search mysql

2.下载MySQL5.7版本

docker pull mysql:5.7  (这里选择的是第一个mysql镜像, :5.7选择的5.7版本)

3.等待下载完成、创建MySQL容器

docker create --name mysql3308 -e MYSQL_ROOT_PASSWORD=root -p 3308:3306 mysql:5.7

 创建容器名称为mysql3308,密码为root

  1. 启动容器

docker start mysql3308

  1. 进入到容器

docker exec -it mysql3308 bash

  1. mysql连接

mysql -uroot –p

 

 

 

 

Docker常用命令

docker images  查看镜像文件

docker ps  查看正在运行的容器

docker ps –a  查看所有的容器

docker container exec -it f0b1c8ab3633 /bin/bash  进入到容器

exit 退出

docker version  查看版本

docker run -d -p 81:80 nginx 启动nginx容器

docker rmi imgageid 删除镜像

docker rm 容器id 删除容器

巧记命令

Docker Common CMD
sudo docker pull <image name>

# docker 镜像
sudo docker images
sudo docker images --tree
sudo docker rmi <image name>
sudo docker rmi $(docker images -f "dangling=true" -q) # 移除所有停止容器

# docker 容器
sudo docker ps -a
sudo docker rm <CONTAINER ID>

# docker run 
docker run -it \ # 交互式
    --name <CONTAINER NAME> \ # 取名
    -v /Users/workspace:/home/workspace \ # 挂载目录
    <image name> \
    bash

Docker Run
# docker run 
docker run -it \ # 交互式
    --name <CONTAINER NAME> \ # 取名
    -v /Users/workspace:/home/workspace \ # 挂载目录
    <image name> \
    bash
    
# docker run with jupyter-notebook
docker run -it -p 8888:8888 tensorflow/tensorflow

# docker run without gui nvida-card
docker run -it \
    --name tensorflow \
    -v /home/workspace/tensorflow:/workspace \
    tensorflow:17.10 \
    bash

# docker start
docker start -ai <CONTAINER NAME>

# docker commit
docker commit \
--author "abc <[email protected]>" 
--message "<CONTAINER NAME>" 
<CONTAINER ID> <image name:tag>

# multiple terminal in docker
docker exec -it <container> bash

Docker Save & Load
sudo docker save -o <save image to path> <image name>
sudo docker save <image name> > <save image to path>

sudo docker load -i <path to image tar file>
sudo docker load < /home/save.tar
Docker with GUI
XQuartz 可以在MAC OS中虚拟出X11-unix目录, 在MAC OS中显示.
而对于Ubuntu而言, 则可以直接使用X11-unix目录. 如果遇到问题“No protocol specified QXcbConnection: Could not connect to display :0”. 使用命令xhost +允许客户端连接.

# xquartz
open -a XQuartz

# XQuarzt ip setup
ip=$(ifconfig en0 | grep inet | awk '$1=="inet" {print $2}') 
xhost + $ip

# docker run with XQuartz
# 以android 包为例
docker run -it \
    --name android \
    -e DISPLAY=$ip:0 \
    -v /tmp/.X11-unix:/tmp/.X11-unix \
    android:171014 \
    bash
对于需要使用主机某些设备时, 需要给予权限.

# docker --privileged 可以使用所有权限和资源
docker run -it --privileged \
    --name tensorflow \
    -e DISPLAY \
    -v /tmp/.X11-unix:/tmp/.X11-unix \
    -v /home/workspace/tensorflow:/workspace \
    tensorflow:17.10 \
    bash

# docker --device 则是指定使用的device, 较为安全.
# docker 使用 host devices, 添加读写 rw 为 3D 应用 
docker run -it --device /dev/dri/:rw \
    --name tensorflow \
    -e DISPLAY \
    -v /tmp/.X11-unix:/tmp/.X11-unix \
    -v /home/workspace/tensorflow:/workspace \
    tensorflow:17.10 \
    bash

Docker Others
删除dangling (none none) images

docker rmi $(docker images -f "dangling=true" -q)
1
添加Tag

docker tag [IMAGE ID]  [REPOSITORY]
1
提交Commit

docker commit --author "### <###@###.com>" --message "###"  [CONTAINER ID]  [REPOSITORY]建线程。

 

 

 

通过Docker安装的Nginx如何配置nginx.conf

 Docker通过容器运行Nginx-----安装的目录 在容器中

/容器id/etc/nginx

/容器id/etc/mysql

默认情况下安装在 容器的etc目录

 

Docker 安装的软件如何修改配置文件的?

答案:容器挂载外部配置文件 –v

使用挂载方式,外部的配置文件覆盖内部容器配置文件

 

 

 

发布了39 篇原创文章 · 获赞 0 · 访问量 757

猜你喜欢

转载自blog.csdn.net/qq_15458763/article/details/103942116