1 2 3 4

docker安装与使用

1.docker定义

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,Docker则可以称为构建一次,到处运行。

2.docker定义安装

win7、win8 等需要利用 docker toolbox 来安装,国内可以使用阿里云的镜像来下载,下载地址:http://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/

注:安装路径不可带有中文

 

cmd输入docker-machine,查看是否安装成功 

3.创建docker machine虚拟机 

 点击Git Bash,输入 notepad .bash_profile 创建和打开.bash_profile 配置文件;

然后,在空白处输入镜像安装路径

export MACHINE_STORAGE_PATH='E:\docker'

保存并关闭后,在E盘创建名为docker的文件夹,在其下创建名为cache的文件夹,将安装文件下的boot2docker.iso拷贝到该文件夹;

在Git Bash中输入更改路径命令,使用docker的时候,会需要从docker的网站下载镜像文件,此处使用阿里云的加速器;

阿里云开发者平台:https://dev.aliyun.com/search.html

 

复制方框中的代码,然后修改为如下(根据自己盘符修改):

现在就可以在Git Bash中运行了:

docker-machine -s "E:\docker"  create --engine-registry-mirror=https://4g2xbfwh.mirror.aliyuncs.com -d virtualbox default

 

 

注:如果开启了电脑自带的虚拟机:Hyper-V,需要关闭,否则在安装时会报错,提示你禁用Hyper-V;查询是否禁用:

 

 

 

 

 

 

 

 

 

 虚拟机中出现如下界面:

 

 

 4.linux风格的Docker环境

docker-machine ls    查看状态

打开Docker Quickstart Terminal或者Git Bash,然后执行下面的命令:

docker-machine start

来启动docker machine。

 

 遇到问题1:VT-x/AMD-V 硬件加速在您的系统中不可用。您的 64-位虚拟机将无法检测到 64-位处理器,从而无法启动。

处理步骤:

1.重启电脑按F2 进入BIOS,找到CPU Configuration> Intel Virtualization Technology,设置为Enabled 。

2 F10.保存退出,重启电脑,再次启动虚拟机。

3 一切正常了。
在虚拟机上查看ip地址
ifconfig (命令)
然后ping(本地的ip地址)(结束ctrl+c)
ping (虚拟机上的ip地址)

 

遇到问题2:双击 Docker Quickstart Terminal  之后提示找不到可执行的 .exe 文件

 

 

 右键Docker Quickstart Terminal  属性,发现目标exe路径不对

 处理步骤:

 可以将本地git的bash.exe路径复制并配置 Docker Quickstart Terminal的“属性”--》“目标” 处;

然后再双击  Docker Quickstart Terminal就可以直接运行了;

 

5.将虚拟机中的默认用户docker切换至root用户

sudo -i

 6.编写Dockerfile文件

# 第一行必须指定基础容器,建议使用aipln类型的小容器
FROM openjdk:8-jdk-alpine

# 维护者信息(可选)
MAINTAINER cjq 978491323@qq.com

# LABEL (可选) 标签信息(自定义信息,多标签放一行)
LABEL app.maintainer=cjq
LABEL app.version="1.0" app.host='cjq' description="docker镜像构建测试"

# ENV  (可选)环境变量(指定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持 
#ENV JAVA_HOME /usr/bin
#ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATH

# USER (可选) 指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户,前面的RUN 不受影响
# RUN groupadd -r postgres && useradd -r -g postgres postgres 
# USER postgres
RUN mkdir /cjq
# WORKDIT 后续的 RUN、CMD、ENTRYPOINT 指令配置容器内的工作目录
WORKDIR /cjq

# ADD/COPY 将外部文件copy到容器中。区别是ADD可以使用URL,还可以是tar
# COPY只能使用dockerfile所在目录
# ADD <src> <dest>
# COPY <src> <dest>
COPY /cjq.jar /cjq/cjq.jar

# RUN 镜像的操作指令
# RUN <command> [“executable”, “param1”, “param2”]。
#RUN echo “deb http://archive.ubuntu.com/ubuntu/ raring main universe” >> /etc/apt/sources.list
#RUN apt-get update && apt-get install -y nginx
#RUN mkdir /home/cjq
#RUN echo “\ndaemon off;” >> /etc/nginx/nginx.conf
EXPOSE 22 80 8443 8080
#CMD ["java","-jar","/cjq.jar"]
# EXPOSE 容器启动后需要暴露的端口

# VOLUME 本地或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。
#VOLUME ["/tmp"]
#VOLUME ["/tmp", "/other/path/"]


# ENTRYPOINT  容器启动后执行命令,不会被docker run提供的参数覆盖,只能有一个ENTRYPOINT,
# 多个ENTRYPOINT,以最后一个为准
#ENTRYPOINT [“executable”, “param1”, “param2”]
#ENTRYPOINT command param param2
#ENTRYPOINT echo "hello-world"
ENTRYPOINT ["java","-jar","cjq.jar"]


# 容器启动时执行指令,每个 Dockerfile 只能有一条 CMD 命令
#CMD [“executable”, “param1”, “param2”] 使用 exec 执行,推荐方式。
#CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用。
#CMD [“param1”, “param2”] 提供给 ENTRYPOINT 的默认参数。
#CMD /usr/sbin/nginx


# ONBUILD 配置当所创建的镜像作为其他新创建镜像的基础镜像时,所执行的操作指令。例如,Dockerfile 使用如下的内容创建了镜像 image-A。-- 很少使用

# ONBUILD ADD . /app/src
# ONBUILD RUN /usr/local/bin/python-build –dir /app/src
View Code
# jdk版本
FROM  java:8

# 临时文件目录
VOLUME /tmp

# 把demo-0.0.1-SNAPSHOT.jar添加到容器里,并重命名为app.jar
ADD csd-gateway-1.0.0.jar csd-gateway-1.0.0.jar

# 开放8080端口
EXPOSE 6061

# ENTRYPOINT 执行项目 app.jar。为了缩短 Tomcat 启动时间,添加一个系统属性指向 "/dev/urandom" 作为 Entropy Source.
# ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom --spring.profiles.active=prod","-jar","/csd-gateway-1.0.0.jar"]
CMD java  -Xms400m -Xmx400m -Dcsp.sentinel.app.type=1 -jar csd-gateway-1.0.0.jar --spring.profiles.active=prod
View Code

介绍一下:

  • FROM :表示使用 Jdk8 环境 为基础镜像,如果镜像不是本地的会从 DockerHub 进行下载
  • MAINTAINER :指定维护者的信息
  • VOLUME :VOLUME 指向了一个/tmp的目录,由于 Spring Boot 使用内置的Tomcat容器,Tomcat 默认使用/tmp作为工作目录。这个命令的效果是:在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录
  • ADD :拷贝文件并且重命名(前面是上传jar包的名字,后面是重命名)
  • RUN :每条run指令在当前基础镜像执行,并且提交新镜像
  • ENTRYPOINT :为了缩短 Tomcat 的启动时间,添加java.security.egd的系统属性指向/dev/urandom作为 ENTRYPOINT

7.创建docker容器

注意:后面末尾有一个空格和一个“.”,cjq是创建的镜像的名字,“.”表示当前目录

docker build -t cjq .

8.查看生成的容器

docker images

9.创建容器并运行jar包

docker run -d -p 8080:8080 --name cjq cjq

-d代表后台运行
-p 8082:8082 端口映射,后一个8082是镜像的端口
第一个lost_and_found代表是给容器的名字
第二个lost_and_found是上面创建镜像的名字
[root@VM_0_15_centos springboot]# docker run -d -p 8080:8080 --name lost_and_found lost_and_found

 

10.查看镜像测试

[root@VM_0_15_centos springboot]# docker ps -a

访问项目通过ip地址:端口号访问成功~

赠以上linux docker操作文档一份

1、解压
tar -xvf docker-18.06.1-ce.tgz

2、将解压出来的docker文件内容移动到 /usr/bin/ 目录下
cp docker/* /usr/bin/   

3、将docker注册为service
vim /etc/systemd/system/docker.service
将下列配置加到docker.service中并保存
 
 
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target

[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s

[Install]
WantedBy=multi-user.target
 
 
 
 
 
 
 4、启动
chmod +x /etc/systemd/system/docker.service #添加文件权限并启动docker
systemctl daemon-reload #重载unit配置文件
systemctl start docker #启动Docker
systemctl enable docker.service #设置开机自启

5、验证
systemctl status docker #查看Docker状态
docker -v #查看Docker版本

6.创建Dockerfile文件(创建镜像必需)

7.通过Dockerfile创建镜像
命令中的lost_and_found是镜像名的意思,此行命令最后有一个点,表示使用当前上下文中的 Dockerfile 文件
[root@VM_0_15_centos springboot]# docker build -t lost_and_found .
运行命令后,看见 Successfully built 3cc4e76442c7则代表创建镜像成功。

8.查看docker镜像

[root@VM_0_15_centos springboot]# docker images

9.运行jar包

-d代表后台运行
-p 8082:8082 端口映射,后一个8082是镜像的端口
第一个lost_and_found代表是给容器的名字
第二个lost_and_found是上面创建镜像的名字
[root@VM_0_15_centos springboot]# docker run -d -p  8080:8080 --name lost_and_found lost_and_found


10.查看容器
[root@VM_0_15_centos springboot]# docker ps -a

访问项目通过ip地址:端口号访问成功~


11.停止所有容器
docker stop $(docker ps -a -q)

启动容器: docker start 容器id

12.删除所有容器
docker  rm $(docker ps -a -q)

删除镜像
docker rmi 镜像id 13.查看日志 docker logs --tail 300 -f cjq 14.重复启动 docker run -d --restart=always -p 8080:8080 --name cjq cjq

 

docker-compose命令的使用

网上下载docker-compose-Linux-x86_64

将docker-compose-Linux-x86_64重命名为docker-compose 

上传文件docker-compose 到/usr/local/bin目录下

修改权限

命令: chmod +x /usr/local/bin/docker-compose

查看docker-compose版本:docker-compose version

 

在docker-compose.yml所在文件夹目录下运行docker-compose up -d           启动容器  可启动多个image   类似于多次Dockerfile配置文件

附录:docker-compose.yml文件

 docker进入容器和退出容器

进入:docker exec -it 容器id /bin/bash
退出:ctrl+d

cloud-alibaba手动生成镜像示例

1.将手动打的jar包和Dockerfile放在同一linux目录下

# jdk版本
FROM  java:8

# 临时文件目录
VOLUME /tmp

# 把demo-0.0.1-SNAPSHOT.jar添加到容器里,并重命名为app.jar
ADD csd-gateway-1.0.0.jar csd-gateway-1.0.0.jar

# 开放8080端口
EXPOSE 6061

# ENTRYPOINT 执行项目 app.jar。为了缩短 Tomcat 启动时间,添加一个系统属性指向 "/dev/urandom" 作为 Entropy Source.
# ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom --spring.profiles.active=prod","-jar","/csd-gateway-1.0.0.jar"]
CMD java  -Xms400m -Xmx400m -Dcsp.sentinel.app.type=1 -jar csd-gateway-1.0.0.jar --spring.profiles.active=prod
View Code

2.打包命令

docker build -t gateway:V1.0.0 .

3.导出镜像

docker save 44cefcff7286 > gateway.tar

4.在新服务器上加载镜像  生成标签

docker load < gateway.tar

docker tag 44cefcff7286 gateway:V1.0.0 

5.启动命令  解决读取不到宿主机hosts

Docker容器运行的时候有 host 、 bridge 、 none 三种网络可供配置。默认是 bridge ,即桥接网络,以桥接模式连接到宿主机; host 是宿主网络,即与宿主机共用网络; none 则表示无网络,容器将无法联网。

解决方案:

只要让容器使用宿主机的host网络即可。

在docker中使用 --network host 来为容器配置 host 网络:

docker run -d --name gateway --network host -p 6061:6061 gateway:V1.0.0

6.查看容器运行日志

docker logs -f gateway

posted @ 2019-10-14 11:22  一缕清风丶  阅读(274)  评论(0编辑  收藏  举报