西瓜的随笔

-人类是因为记录才进入文明-

2020/04/26
23:41
technology

docker

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 LinuxWindows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。 

docker安装:

curl -fsSL get.docker.com -o get-docker.sh 
sh get-docker.sh --mirror AzureChinaCloud

修改镜像源:

在/etc/docker/daemon.json 文件中新增一下内容, 如果不存在,在创建此文件

{

“registry-mirrors”:[“https://registry.docker-cn.com”]

},

然后重启 docker

systemctl restart docker

就可以了。(也可以选择其他加速源,如阿里,daocloud)

ps: <> 必填 [] 选填

ps: -i 交互式操作 -t 终端 –rm 容器退出后将其删除,默认不会将其删除 -d 守护态运行 –name 指定容器名 -p指定端口

docker下载镜像              docker  pull  [ip:port/]镜像名[:标签]
docker查看镜像		   docker images
docker运行容器		   docker run [参数] 容器id      
                    例: docker run -p 8080:8080 s1dafad   
                    ps: docker run -p(指定端口) 宿主机端口:容器端口 容器id
docker以交互式操作启动容器:  	
docker run -it --rm \   
ubuntu:16.04 \
bash

docker以交互的方式进入容器:	docker exec -it 容器id bash(容器已启动的情况下)
docker启动一个已存在的容器	docker start 容器id
docker终止容器			docker stop 容器id
docker查看正在运行的容器		docker ps 
docker查看所有的容器		docker ps -a
docker删除容器			docker rm 容器id 		-f 强制删除
docker删除镜像			docker rmi 镜像id 
docker删除虚悬镜像		docker images prune   (build 失败 和 pull  都可能出现虚悬镜像)
docker删除所有终止镜像		docker container  prune 
docker构建镜像:                  docker build -t 镜像名[:标签名]  镜像构建上下文目录
例: docker build -t nginx:v3 .    	.表示当前目录

docker查看容器日志		docker  -f  logs 容器名/容器id     -f  跟踪实时日志
docker从容器中复制文件		docker cp 容器名:文件地址   宿主机地

Dockerfile 定制镜像:

指定基础镜像

FROM nginx

指定工作目录

WORKDIR /usr/share/nginx/

运行 命令

ps: docker命令每一次 RUN 命令都会创建一个容器(分层存储),所以不能用 cd /usr/share/nginx/ 这样的 命令来切换目录,

ps:如果需要切换工作目录,需要先使用 WORKDIR /usr/share/nginx/ 命令,记得最后,要将工作目录切换为本来的工作目录

RUN <shell命令>

拷贝命令

1.shell 命令

COPY 相对路径文件位置(源文件) 镜像中文件位置 例: COPY index.html /usr/share/nginx/html/

2.exec命令

COPY [“<源路径1>”,… “<目标路径>”]

高级 拷贝 命令(源文件可以是一个url,如果源文件是tar.gz,gizp,bzip2,xz格式的压缩包,ADD会自动解压缩)

ADD 源文件 镜像中文件位置

暴露端口(容器端口,当使用 docker run -P nginx 时,容器端口为80,宿主机端口为随机(-P 为随机端口 -p 指定端口))

EXPOSE 80

指定默认程序主进程的命令

1.shell 命令

CMD <shell命令>

2.exec 命令

CMD [“可执行文件”, “参数1”, “参数2″…]

设置环境变量

ENV <key> <value>

ENV <key1>=<value1> <key2>=<value2>…

20200427新增:

一个简单的Dockerfile 模板

FROM java:8

#定义环境变量(下边可直接使用)
ENV PORT 9100
#也可以这样定义
ENV JARNAME=eureka-server-1.0.0.jar APPNAME=app.jar

#指定维护者
MAINTAINER wmelon

#指定工作目录(也可作为切换工作目录,Dockerfile中  cd  是不能使用的)
WORKDIR /usr/local/docker/eureka/

#将文件复制到容器
COPY $JARNAME $APPNAME
#也可以这样复制(这样复制,可以自动解压tar.gz,gizp,bzip2,xz格式的压缩包,源文件可以是一个url)
#推荐使用COPY,因为语义更明确
ADD $JARNAME $APPNAME

#指定容器端口
EXPOSE $PORT

#可以这样执行
CMD ["java","-jar","app.jar"]
#也可以这样,如果同时存在的话,CMD 内容会作为参数传递给 ENTRYPOINT,使用ENTYRPOINT也可以接收外部参数,比如 docker run eureka-server ---spring.profiles.active=dev  
#此时这个 --spring.profiles.active=dev 就会传递到 app.jar 之后,变成 java -jar app.jar --spring.profiles.active=dev 
ENTRYPOINT  ["java","-jar","app.jar"]

20200428新增:

docker 推镜像:(阿里云镜像仓库, https://cr.console.aliyun.com/cn-hangzhou/instances/repositories 可以申请)

1.登录仓库

docker login –username=<账号> registry.cn-hangzhou.aliyuncs.com

2.给本地镜像打tagxin

docker tag 镜像id 仓库网络地址/命名空间/镜像名:[镜像版本号]

3.推镜像

docker push 仓库网络地址/命名空间/镜像名:[镜像版本号]

4.拉镜像

docker pull 仓库网络地址/命名空间/镜像名:[镜像版本号]

更多命令可参考:https://www.funtl.com/zh/docs-docker/