Docker 시작 및 실전 노트
一、 镜像
1.1、 获取镜像
命令: docker pull NAME[:TAG] 例: docker pull centos 相当于 docker pull centos:latest 相当于 docker pull registry.hub.docker.com/centos:latest registry.hub.docker.com是默认的注册服务器(Docker Hub)1.2、 查看镜像信息
命令: docker images docker tag 为本地镜像添加新的标签 例:docker tag dl.dockerpool.com:5000/centos:latest centos:latest dl.dockerpool.com:5000/centos:latest和centos:latest指向同一个镜像 docker inspect 获取镜像的详细信息 例:① docker inspect 5506de2b643b ② docker inspect –f {{“.NetworkSettings.IPAddress”}} 5501.3、 搜索镜像
命令: docker search 例: docker search mysql1.4、 删除镜像
命令: docker rmi IMAGE IMAGE可以是标签或ID1.5、 创建镜像
创建镜像的方法有三种:⑴基于已有镜像的容器创建,⑵基于本地模板导入,⑶基于Dockerfile创建 ⑴、 docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] 主要选项:-a, --author=”” 作者信息 -m, --message=”” 提交消息 -p, --pause=true 提交是暂停容器运行 例:docker commit –m “Added a new file” –a “Docker Newbee” a925cb40b3f0 test ⑵、 docker import 例:cat my_container.tar |docker import - image_name:tag docker export> my_container.tar docker export 命令,导出容器快照到本地文件 1.6、 存出和载入镜像
命令: docker save(存出)和 docker load(载人) 例:docker save –o ubuntu_14.04.tar ubuntu:14.04 docker load –input ubuntu_14.04.tar 或 docker load < ubuntu_14.04.tar docker load 来导入镜像存储文件到本地镜像库 docker import 来导入一个容器快照到本地镜像库 容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态)从容器快照文件导入时可以重新指定标签等元数据信息 镜像存储文件将保存完整记录,体积也要大1.7、 上传镜像
镜像默认存储在/var/lib/docker 命令: docker push NAME[:TAG] 例:docker push user/test:latest二、 容器
2.1、创建容器
命令: docker create [OPTIONS] IMAGE [COMMAND] [ARG...] docker start [OPTIONS] CONTAINER [CONTAINER...] docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 创建的容器处于体质状态,使用docker start 启动它 docker run 等价于 docker create ,docker start 例:docker create –it ubuntu:latest docker run –it ubuntu:14.04 /bin/bash Ctrl+d 或输入exit退出容器 docker logs [OPTIONS] CONTAINER 获取容器的输出信息2.2、终止容器
命令: docker stop [OPTIONS] CONTAINER [CONTAINER...] -t|--time[=10]] 首先发送SIGTERM信号,等待一段时间后再发送SIGKILL信号终止容器 docker kill 直接发送SIGKILL信号来强行终止容器 例: docker stop ce5 docker start ce5 docker restart ce52.3、进入容器
进入容器有多种方法:⑴ docker attach ⑵ docker exec ⑶ nsenter docker attach [OPTIONS] CONTAINER 多个窗口同时attach到同一个容器是,所有窗口都会同步显示 docker exec –ti 6e5542159db4 /bin/bash PID=$(DOCKER INSPECT –F “{{.State.Pid}}”) nsenter --target $PID --mount --uts --ipc --net --pid 2.4、删除容器
命令: docker rm [OPTIONS] CONTAINER [CONTAINER...] 例:docker rm 6e5542159db4 删除运行中的容器,添加-f2.5、导入和导出容器
导出容器:导出一个已经创建的容器到一个文件 命令: docker export [OPTIONS] CONTAINER 例:docker export ce5 >test_for_run.tar 将文件传输到其他机器上,通过导入命令实现容器的迁移 导入容器:导入文件为镜像 例:cat my_container.tar |docker import - image_name:tag三、 仓库
登录命令: docker login docker run –d –p 5000:5000 –v /opt/data/registry:/tmp/registry registryStart your registry
docker run -d -p 5000:5000 --name registry registry:2 Pull (or build) some image from the hub docker pull ubuntu Tag the image so that it points to your registry docker tag ubuntu localhost:5000/myfirstimage Push it docker push localhost:5000/myfirstimage Pull it back docker pull localhost:5000/myfirstimage Now stop your registry and remove all data docker stop registry && docker rm -v registry四、 数据管理
4.1、数据卷
在用docker run 命令的时候,使用-v 可以再容器内创建一个数据卷,多次使用可创建多个数据卷 例: ①、创建数据卷 docker run -dp --name web -v /webapp ubuntu:14.04 docker inspect -f {{.Volumes}} $CONTAINER_ID 可查看数据卷对应的主机上的文件 ②、挂载一个主机目录作为数据卷 docker run -dp --name web -v /src/webapp:/opt/webapp ubuntu:1404 上面这条命令加载主机/src/webapp目录到容器的/opt/webapp目录 docker run -dp --name web -v /src/webapp:/opt/webapp:ro ubuntu:14.04 加了:ro之后,容器内挂载的数据卷的数据就无法修改。 docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu:14.04 这样就可以记录在容器输入过的命令历史(不同shell版本有所不同) 4.2、数据卷容器4.2、数据卷容器
①、创建一个数据卷容器dbdata,并在其中创建一个数据卷挂载到/dbdata docker run -ti -v /dbdata --name dbdata ubuntu:14.04 ②、创建db1和db2两个容器,并从dbdata容器挂载数据卷 docker run -ti --volumes-from dbdata --name db1 ubuntu:14.04 docker run -ti --volumes-from dbdata --name db2 ubuntu:14.04 ③、可以多次使用–volumes-from参数来从多个容器挂载多个数据卷。还可以从其他已经挂载了容器卷的容器来挂载数据卷 docker run -d --name db3 --volumes-from db1 ubuntu:14.04 #注意:使用--volumes-from参数所挂载数据卷的容器自身并不需要保持在运行状态4.3利用数据卷容器迁移数据
①、备份 docker run --volumes-from dbdata -v $(pwd):/backup --name worker ubuntu:14.04 tar cvf /backup/backup.tar /dbdata a.首先利用ubuntu镜像创建了一个容器worker。 b.使用–volumes-from dbdata参数来让worker容器挂载dbdata容器的数据卷(即dbdata数据卷); c.使用-v $(pwd):/backup参数来挂载本地的当前目录到worker容器的/backup目录 worker容器启动后,使用了tar cvf /backup/backup.tar /dbdata命令来将/dbdata下内容备份为容器内的/backup/backup.tar,即宿主主机当前目录下的backup.tar。 ②、恢复 docker run -v /dbdata --name dbdata2 ubuntu:14.04 docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar五、网络基础配置
5.1、端口映射实现访问容器
①、通过-P或-p指定端口映射, -P 随机映射一个49000~49900的端口,-p可以指定要映射的端口5.2、容器互联实现容器间通信
--link 参数可以让容器之间安全的进行交互 –link name:alias 例: docker run –d –P –name web –link db:db training/webapp python app.py db为容器的名字六、使用Dockerfile 创建镜像
6.1、基本结构
Dockerfile分为四部分: ①基础镜像信息, ②维护者信息, ③镜像操作指令,④容器启动时执行指令6.2、指令
FROM: 格式为 FROM 或 FROM:第一条指令必须是FROM指令。并且,如果在同一个Dockerfile中创建多个镜像时,可以使用多个FROM指令(每个镜像一次)。 MAINTAINER:格式为MAINTAIER ,指定维护者信息。 RUN: RUN
RUN [“executable”,“param1”,“param2”]。 shell , /bin/sh–c; exec 。 , RUN[“/bin/bash”,“-c”,“echohello”]。 RUN , 。 \ 。 CMD: : CMD [“executable”,“param1”,”param2”] exec , CMD command param1 param2 /bin/sh , 。 CMD [“param1”,”param2”] ENTRYPOINT , , :CMD[“/run.sh”]。 : Dockerfile , 。 , CMD 。
EXPOSE: :EXPOSE
[ …] Docker , 。 -P( ),Docker ; -p, 。 ENV: :ENV
, RUN , ADD: :ADD
。src Dockerfile , URL; tar ( ) COPY: : copy
( Dockerfile , ) . , 。 , COPY ENTRYPOINT: : ENTRYPOINT [“executable”, “param1”,”param2”] ENTRYPOINT command param1 param2(shell ) , docker run 。 Dockerfile ENTRYPOINT, ENTRYPOINT , 。 CMD , 。
USER: :USER daemon UID, RUN 。 , 。 。 gosu, sudo。 , root 。
WORKDIR: : WORKDIR /path/to/workdir RUN,CMD,ENTRYPOINT WORKDIR , , 。
ONBUILD: , 。 ,Dockerfile image-A […] ONBUILD ADD . /app/src ONBUILD RUN /usr/local/bin/python-build –dir /app/src […] FROM image-A # ADD . /app/src RUN /usr/local/bin/ python-build–dir/app/src
6.3、创建镜像
命令:docker build 例:docker build –t build_repo/first_image /tmp/docker_builder/ 指定Dockerfile 所在路径为/tmp/docker_builder/, 并且希望生产镜像标签为build_repo/first_image
브리지는 데이터 링크 계층에서 두 LAN을 연결하고 MAC 주소에 따라 프레임을 전달하는 것으로 낮은 계층의 라우터로 볼 수 있습니다.
다리 연결은 한 기계의 몇 개의 네트워크 인터페이스를 연결하는 것이다.그 결과 한 인터넷 입구에서 받은 메시지가 다른 인터넷 입구에 복사되어 발송된다.인터넷 입구 사이의 메시지를 서로 전달할 수 있도록 하다
교환기는 바로 이런 설비이다. 교환기는 몇 개의 네트가 있고, 이 네트들은 다리로 연결되어 있다.따라서 교환기와 연결된 몇몇 호스트는 교환기의 메시지를 전송하여 서로 통신할 수 있다.교환기는 MAC 주소 식별을 바탕으로 패키지 전송 기능을 봉인할 수 있는 네트워크 장치다.스위치는 MAC 주소를 학습하여 내부 주소표에 저장할 수 있으며 데이터 프레임의 시발자와 목표 수신자 사이에 임시 교환 경로를 구축하여 데이터 프레임이 원본 주소에서 목적 주소로 직접 도착하도록 한다.
브리지 닫기: ip link set br-79ea889a5ac8 down
브리지 삭제:brctl delbr br-79ea889a5ac8
Virtual EthernetPair는 약칭vethpair로 쌍을 이루는 포트로 이 포트의 한쪽에서 들어오는 모든 패키지가 다른 한쪽에서 나오고 반대로도 마찬가지다.
(1) "veth pair"인터페이스 A와 B를 만듭니다.
ip link add A type veth peer name B
⑵, 연결 A 인터페이스에서 브리지 docker0
brctl addif docker0 A
(3) A 인터페이스 활성화
ip link set A up
brctl Usage: brctl [commands] commands:
addbrbridge 이름 #bridge 추가하기;delbr bridge 이름 #bridge 삭제;addif bridge의 이름 device의 이름 # 인터페이스를bridge에 추가하기;delif bridge의 이름 device의 이름 #bridge에서 인터페이스 setageing bridge의 이름 시간 # 설정 노화 시간즉, 생존 주기 setbridgeprio bridge의 이름 우선 순위 # 설정 bridge의 우선 순위 setfd bridge의 이름 시간 # 설정 bridge 전송 지연 시간 sethello bridge의 이름 시간 # 설정 hello 시간 setmaxage bridge의 이름 시간 # 메시지의 최대 생명 주기 setpathcost bridge의 이름 포트 권한 # 설정 경로의 권한 값 setportprio bridge의 이름 끝입 우선 순위 # 포트 설정 우선 순위 show #bridge 목록 showmacsbridge 이름 #MAC 주소 showstpbridge 이름 #bridge stp 정보 stpbridge 이름 보이기 {on|off} #stp 켜기/끄기
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.