docker基础

​ 仓库(push/pull)

Dockerfile (build)>镜像 <(save/load)>tar文件

​ 容器(commit/run)

(镜像可以理解为一个Java类,而容器可以理解为Java类的实例。)

https://blog.csdn.net/sunnyzyq/article/details/101222410

#可以把docker中的容器看作独立的虚拟机,mall-tiny-docker访问localhost自然会访问不到mysql,**docker容器之间可以通过指定好的服务名称db进行访问**,至于db这个名称可以在运行mall-tiny-docker容器的时候指定.
url: jdbc:mysql://db:3306/mall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
#使用docker命令启动(--link mysql:db 表示应用可以用db这个域名访问mysql服务)
docker run -p 8080:8080 --name mall-tiny-docker --link mysql:db -v /etc/localtime:/etc/localtime -v /mydata/app/mall-tiny-docker/logs:/var/logs -d mall-tiny/mall-tiny-docker:0.0.1-SNAPSHOT


#新建并启动容器
docker run -p 80:80 --name nginx -d nginx:1.17.0     #-d选项:表示后台运行
#查看当前全部日志
docker logs $ContainerName
docker logs $ContainerName(或者$ContainerId) -f  #动态查看日志
#在宿主机查看docker使用cpu、内存、网络、io情况
docker stats $ContainerName
docker stats -a #所有容器
#查看Docker磁盘使用情况
docker system df
#进入Docker容器内部的bash
docker exec -it $ContainerName /bin/bash
#查看Docker镜像的存放位置
docker info | grep "Docker Root Dir" 
 
docker run --name logstash -p 4560:4560 -p 4561:4561 -p 4562:4562 -p 4563:4563 \
--link elasticsearch:es \
-v /mydata/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf \
-d logstash:7.6.2 

docker run [OPTIONS] IMAGE [COMMOND] [ARGS...]
# OPTIONS 说明
	--name="容器新名字": 为容器指定一个名称;
	--network:指定网络
	--rm:容器停止自动删除容器
	-d: --detach 后台运行容器,并返回容器ID,也即启动守护式容器;
	-v:--volume 挂在数据卷
	-i:--interactiv 以交互模式运行容器,通常与 -t 同时使用;
	-t:-tty 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
	-P: 随机端口映射;
	-p: 指定端口映射,有以下四种格式
	      ip:hostPort:containerPort
	      ip::containerPort
	      hostPort:containerPort
	      containerPort 
	      
在已运行的容器中运行命令
docker exec [OPTIONS] CONTAINER COMMAND [ARG…] 
  
-d, --detach=false # 后台运行容器,并返回容器ID;
-i, --interactive=false # 以交互模式运行容器,通常与 -t 同时使用;
-t, --tty=false # 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-u, --user="" # 指定容器的用户
-a, --attach=[] # 登录容器(必须是以docker run -d启动的容器)
-w, --workdir="" # 指定容器的工作目录
-c, --cpu-shares=0 # 设置容器CPU权重,在CPU共享场景使用
-e, --env=[] # 指定环境变量,容器中可以使用该环境变量
-m, --memory="" # 指定容器的内存上限
-P, --publish-all=false # 指定容器暴露的端口
-p, --publish=[] # 指定容器暴露的端口
-h, --hostname="" # 指定容器的主机名
-v, --volume=[] # 给容器挂载存储卷,挂载到容器的某个目录
--volumes-from=[] # 给容器挂载其他容器上的卷,挂载到容器的某个目录
--cap-add=[] # 添加权限,权限清单详见:http://linux.die.net/man/7/capabilities
--cap-drop=[] # 删除权限,权限清单详见:http://linux.die.net/man/7/capabilities
--cidfile="" # 运行容器后,在指定文件中写入容器PID值,一种典型的监控系统用法
--cpuset="" # 设置容器可以使用哪些CPU,此参数可以用来容器独占CPU
--device=[] # 添加主机设备给容器,相当于设备直通
--dns=[] # 指定容器的dns服务器
--dns-search=[] # 指定容器的dns搜索域名,写入到容器的/etc/resolv.conf文件
--entrypoint="" # 覆盖image的入口点
--env-file=[] # 指定环境变量文件,文件格式为每行一个环境变量
--expose=[] # 指定容器暴露的端口,即修改镜像的暴露端口
--link=[] # 指定容器间的关联,使用其他容器的IP、env等信息
--lxc-conf=[] # 指定容器的配置文件,只有在指定--exec-driver=lxc时使用
--name="" # 指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字
--net="bridge" # 容器网络设置:
    bridge  # 使用docker daemon指定的网桥
    host  # 容器使用主机的网络
    container:NAME_or_ID > # 使用其他容器的网路,共享IP和PORT等网络资源
    none # 容器使用自己的网络(类似--net=bridge),但是不进行配置
--privileged=false # 指定容器是否为特权容器,特权容器拥有所有的capabilities
--restart="no" # 指定容器停止后的重启策略:
    no # 容器退出时不重启
    on-failure # 容器故障退出(返回值非零)时重启
    always # 容器退出时总是重启
--rm=false # 指定容器停止后自动删除容器(不支持以docker run -d启动的容器)
--sig-proxy=true # 设置由代理接受并处理信号,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理

安装和常用CLI
添加阿里云镜像:sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装命令:sudo yum install -y docker-ce docker-ce-cli containerd.io
启动命令:sudo systemctl start docker
添加当前用户到docker用户组:sudo usermod -aG docker $USER (需注销),newgrp docker (立即生效)
Helloworld:docker run hello-world (本地没有镜像的话会自动从远端仓库pull)
pull nginx 镜像:docker pull nginx(等效于nginx:latest)
运行:docker run -【d】(后台运行不阻塞shell) 【-p 80:80】(指定容器端口映射,内部:外部) nginx

$ docker run --name nginx-test -p 8080:80 -d nginx

查看正在运行:docker ps
删除容器:docker rm -f container id(不用打全,前缀区分)
进入bash:docker exec -it container id(不用打全,前缀区分) bash
commit镜像:docker commit container id(不用打全,前缀区分) name
查看镜像列表:docker images (刚才commit的镜像)
使用运行刚才commit的镜像:docker run -d name
使用Dockerfile构建镜像:docker build -t name 存放Dockerfile的文件夹
删除镜像:docker rmi name
保存为tar:docker save name tar name
从tar加载:docker load tar name

//使用 tomcat 镜像
//-d 后台运行
//-p 指定访问主机的8081端口映射到8080端口。  内部端口号:外部端口号
//-v 指定我们容器的/usr/local/tomcat/webapps/目录为/root/tomcat/主机目录,后续我们要对tomcat进行操作直接在主机这个目录操作即可。
//指定映像版本:name:ver
docker run -d -p 8081:8080 -v /root/tomcat/:/usr/local/tomcat/webapps/ tomcat

//列出所有容器 ID 
docker ps -aq
//停止所有容器 
docker stop $(docker ps -aq)
//停止单个容器 
docker stop 要停止的容器名
//删除所有容器
docker rm $(docker ps -aq)
//删除单个容器
docker rm 要删除的容器名
//删除所有的镜像
docker rmi $(docker images -q)
  
//进入目录
docker exec -it xxxxxx容器 /bin/bash
  
  
//vim 新建Dockerfile文件
FROM java:8
MAINTAINER bingo
ADD demo-0.0.1-SNAPSHOT.jar demo.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","demo.jar"]
  
//创建镜像   注意最后的 .  表示 Dockerfile 文件在当前目录下
docker build -t my/demo .
//这个表示docker容器在停止或服务器开机之后会自动重新启动 --restart=always
//已经运行的docker容器怎么设置自动重启? docker update –-restart=always demo 
docker run -d --name demo -p 8080:8080 my/demo
//查看启动日志
docker logs --tail  300 -f  demo   
//打包镜像
docker save -o xxxx.tar my/demo
//解包
docker load -i xxxx.tar
  • 打包springboot项目为jar包
  • 编写Dockerfile文件
    # Docker image for springboot file run
    # VERSION 0.0.1
    # Author: eangulee
    # 基础镜像使用java 第一次打包,它会自动下载java 8的镜像作为基础镜像,以后再制作镜像的时候就不会再下载了
    FROM java:8
    # 作者
    MAINTAINER eangulee <[email protected]>
    # VOLUME 指定了临时文件目录为/tmp。
    # 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
    VOLUME /tmp 
    # 将jar包添加到容器中并更名为app.jar
    ADD demo-0.0.1-SNAPSHOT.jar app.jar 
    # 运行jar包
    RUN bash -c 'touch /app.jar'
    #ENTRYPOINT 执行项目 app.jar。为了缩短 Tomcat 启动时间,添加一个系统属性指向 “/dev/./urandom” 作为 Entropy Source
    ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
    
  • 部署文件

    在服务器新建一个docker文件夹,将打包好的jar包Dockerfile文件复制到服务器的docker文件夹下

  • 制作镜像
    #-t 参数是指定此镜像的tag名
    docker build -t springbootdemo4docker .
    docker images
    
  • 启动容器
    docker run -d -p 8080:8085 springbootdemo4docker
    #-d参数是让容器后台运行 
    #-p 是做端口映射,此时将服务器中的8080端口映射到容器中的8085(项目中端口配置的是8085)端口
    
  • 访问网站

    直接浏览器访问: http://你的服务器ip地址:8080/

常用命令

#只显示官方镜像
docker search ubuntu --filter "is-official=true"  
#dangling: true:仅返回悬虚镜像,false仅返回非悬虚镜像。悬虚镜像:指没有标签的镜像。
docker image ls --filter [dangling|before|since|lable|reference]
docker image pull <repository>:<tag>
#IMAGE[:TAG] 指的是镜像的名字和版本    COMMAND 指的是镜像运行起来要执行什么样的命令  [ARG...]  指的是前面的命令所依赖的参数
docker run [options] image[:tag][command][arg...]


#查看	
docker images	列出所有镜像(images)
docker ps	列出正在运行的容器(containers)
docker ps -a	列出所有的容器
docker pull centos	下载centos镜像
docker top ‘container’	查看容器内部运行程序
#容器	
docker exec -it 容器ID sh	进入容器
docker stop ‘container’	停止一个正在运行的容器,‘container’可以是容器ID或名称
docker start ‘container’	启动一个已经停止的容器
docker restart ‘container’	重启容器
docker rm ‘container’	删除容器
docker run -i -t -p :80 LAMP /bin/bash	运行容器并做http端口转发
docker exec -it ‘container’ /bin/bash	进入ubuntu类容器的bash
docker exec -it /bin/sh	进入alpine类容器的sh
docker rm docker ps -a -q	删除所有已经停止的容器
docker kill $(docker ps -a -q)	杀死所有正在运行的容器,$()功能同``
#镜像	
docker build -t wp-api .	#构建1个镜像,-t(镜像的名字及标签) wp-api(镜像名) .(构建的目录)
docker run -i -t wp-api	#-t -i以交互伪终端模式运行,可以查看输出信息
docker run -d -p 80:80 wp-api	#镜像端口 -d后台模式运行镜像
docker rmi [image-id]	#删除镜像
docker rmi $(docker images -q)	#删除所有镜像
docker rmi $(sudo docker images --filter "dangling=true" -q --no-trunc)	#删除无用镜像
ocker run --help	帮助

你可能感兴趣的:(技术架构,docker,容器,运维)