docker的基本使用主要记录docker在不管是生产环境还是测试环境中的使用和一些基本使用命令。
docker镜像下载
docker pull centos Using default tag: latest latest: Pulling from library/centos 8ba884070f61: Pull complete Digest: sha256:b5e66c4651870a1ad435cd75922fe2cb943c9e973a9673822d1414824a1d0475 Status: Downloaded newer image for centos:latest
docker镜像修改现有镜像的标签
docker tag b2b03e9146e1 192.168.31.11:5000/registry:latest-20180802
docker 容器打包成镜像
docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos 7.2.1511 4cbf48630b46 2 weeks ago 195MB docker commit nginx centos7_nginx/1.14.0:1.1.0000 sha256:ff95b2363312cd57e43910aa2ec5931914089de662c9dd6c8bc4cb32ad053da5 docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos7_nginx/1.14.0 1.1.0000 ff95b2363312 8 seconds ago 1.06GB centos 7.2.1511 4cbf48630b46 2 weeks ago 195MB docker run -it -v /home/www:/home/www -v /home/wwwlogs:/home/wwwlogs -v /home/wwwroot:/home/wwwroot -p 80:80 --name nginx1.0 0bca63fa07ed /bin/bash
1、先启动一下docker,在下载镜像
systemctl start docker.service docker pull centos:7.2.1511 #下载centos镜像 7.2.1511: Pulling from library/centos a8c7037c15e9: Pull complete Digest: sha256:28f14903e337f2c897aa74e8c3c5ff38086849866a1a88b6554632e7d68c7c21 Status: Downloaded newer image for centos:7.2.1511 docker images #查看镜像文件 REPOSITORY TAG IMAGE ID CREATED SIZE centos 7.2.1511 9aec5c5fe4ba 2 weeks ago 195MB
2、先创建一个容器,然后在进入容器
docker run --name centos-mast -it centos:7.2.1511 /bin/bash docker run 参数: -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项; -d: 后台运行容器,并返回容器ID; -i: 以交互模式运行容器,通常与 -t 同时使用; //相当于在本地添加了一个系统 -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用; --name="nginx-lb": 为容器指定一个名称; --dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致; --dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致; -h "mars": 指定容器的hostname; -e username="ritchie": 设置环境变量; --env-file=[]: 从指定文件读入环境变量; --cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行; -m :设置容器使用内存最大值; --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型; --link=[]: 添加链接到另一个容器; --expose=[]: 开放一个端口或一组端口;
3、容器创建之后如果关闭了,需要启动一下
docker start d26f95f7a059 docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d26f95f7a059 centos:7.2.1511 "/bin/bash" 10 minutes ago Up About a minute centos-mast
这里是查看容器的启动状态,ps只是查看已经启动的容器,-a是所有容器的 这里我们关闭一个容器,然后在开启一个容器,用ps和-a来区别 docker container ls和docker ps -a是一个意思
docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 15e751674ce2 centos:7.2.1511 "/bin/bash" 9 seconds ago Exited (0) 4 seconds ago centos-test 799156d56e78 centos:7.2.1511 "/bin/bash" About a minute ago Up About a minute centos-master docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 799156d56e78 centos:7.2.1511 "/bin/bash" About a minute ago Up About a minute centos-master
NAMES的centos-test没有启动所以在docker ps的时候没有现实出来
4、进入容器中的四种方式: 第一种是使用shh登录,这个后面会详细说明 第二种是attach
docker attach ea03a67c8ede [root@ea03a67c8ede /]# exit
第三种使用exec登录
docker exec -it 799156d56e78 /bin/bash [root@799156d56e78 /]# exit exit
第四种使用nsenter,需要先安装nsenter
$ wget https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz $ tar -xzvf util-linux-2.24.tar.gz $ cd util-linux-2.24/ $ ./configure --without-ncurses $ make nsenter $ sudo cp nsenter /usr/local/bin
安装nsenter之后可以使用docker inspect 第一种获取容器进程的方法
docker inspect 799156d56e78 #找到pid的进程 .............................. "Path": "/bin/bash", "Args": [], "State": { "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 25083, #############pid "ExitCode": 0, "Error": "", ..............................
第二种获取容器的方法
docker inspect -f {{.State.Pid}} 799156d56e78 25083
通过进程PID使用nsenter命令访问该容器
nsenter --target 25083 --mount --uts --ipc --net --pid
5、删除容器 首先在删除容器之前需要看一下容器是否启动,如果启动的容器需要先停止容器在删除
docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 15e751674ce2 centos:7.2.1511 "/bin/bash" 32 minutes ago Exited (0) 32 minutes ago centos-test 799156d56e78 centos:7.2.1511 "/bin/bash" 34 minutes ago Up 33 minutes centos-master
这里有两个容器,我们就把master-test先启动一下,
docker start 15e751674ce2 #这里启动有多种方法,也可以使用NAMES 15e751674ce2 docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 15e751674ce2 centos:7.2.1511 "/bin/bash" 35 minutes ago Up 4 seconds centos-test 799156d56e78 centos:7.2.1511 "/bin/bash" 37 minutes ago Up 37 minutes centos-master
删除容器
docker rm -f 15e751674ce2 15e751674ce2 docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 799156d56e78 centos:7.2.1511 "/bin/bash" 38 minutes ago Up 38 minutes centos-master
删除镜像,在删除镜像之前需要把关于镜像的容器都删除之后才可以删除镜像。删除镜像
docker rmi 9aec5c5fe4ba
6、容器导入导出 export 和improt export导出容器
docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c2e926fb6280 centos:7.2.1511 "/bin/bash" 38 seconds ago Up 20 seconds centos-master 7bb443f8242d centos:7.2.1511 "/bin/bash" About a minute ago Up 53 seconds centos-test docker export c2e926fb6280 > master.tar #导出docker容器 docker stop c2e926fb6280 #停止容器 c2e926fb6280 docker rm -f c2e926fb6280 #删除导出的容器 c2e926fb6280 docker ps -a #查看一下所有的容器 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7bb443f8242d centos:7.2.1511 "/bin/bash" 2 minutes ago Up About a minute centos-test ls anaconda-ks.cfg master.tar
容器已经删除了,下面导入一下看看和导出的容器有什么不一样。 save导出容器
docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7bb443f8242d centos:7.2.1511 "/bin/bash" 19 minutes ago Up 18 minutes centos-test docker save -o test.tar centos:7.2.1511 ls anaconda-ks.cfg master.tar test.tar
使用import导入
docker load < master.tar #使用export导出的容器不能使用load导入 open /var/lib/docker/tmp/docker-import-809953529/dev/json: no such file or directory
这就是docker load 和docker import 的区别。因为压缩包如果是用docker save打包的,自然可以用docker load,但是如果压缩包是用docker export打包的,那就需要用docker import。命令如下:
cat master.tar | docker import - master sha256:84ddb755c56912acd667a7ea38fa28ef0ef1f25bc1620c5e633583a20357bcc5
或者
docker import - master:7.2.1512 < master.tar sha256:05946cc630b0a854008cfe8d6da84304266d15ea3967e4e5677c5bb1e3ee1420 docker images REPOSITORY TAG IMAGE ID CREATED SIZE master 7.2.1512 05946cc630b0 2 seconds ago 195MB master latest bcc76bba78b5 4 minutes ago 195MB centos 7.2.1511 9aec5c5fe4ba 2 weeks ago 195MB
load导入
docker images REPOSITORY TAG IMAGE ID CREATED SIZE master latest bcc76bba78b5 16 minutes ago 195MB centos 7.2.1511 9aec5c5fe4ba 2 weeks ago 195MB docker rmi 9aec5c5fe4ba Untagged: centos:7.2.1511 Untagged: centos@sha256:28f14903e337f2c897aa74e8c3c5ff38086849866a1a88b6554632e7d68c7c21 Deleted: sha256:9aec5c5fe4ba9cf7a8d2a50713dd197c3b0cbd5f5fcd03babe4c1d65c455dabf Deleted: sha256:a11c91bfd8669f0c82d437f0604d44080c7fa2ccda06d0fa2ba75275c9be4b3b docker images REPOSITORY TAG IMAGE ID CREATED SIZE master latest bcc76bba78b5 16 minutes ago 195MB docker load -i test.tar a11c91bfd866: Loading layer [==================================================>] 202MB/202MB Loaded image: centos:7.2.1511 docker images REPOSITORY TAG IMAGE ID CREATED SIZE master latest bcc76bba78b5 16 minutes ago 195MB centos 7.2.1511 9aec5c5fe4ba 2 weeks ago 195MB
这里注意一下使用export导出的容器需要使用docker import导入,使用docker save导出的使用load导入。所有导入的容器都会生成新的镜像,可以使用镜像直接生成新的容器即可完成恢复。 Dockerfile
mkdir docker_file cd docker_file/ vi Dockerfile cat Dockerfile FROM ubuntu:14.04 ENTRYPOINT ["/bin/echo"] [root@#localhost docker_file]# docker build Sending build context to Docker daemon 2.048 kB Step 1/2 : FROM ubuntu:14.04 ---> 7c09e61e9035 Step 2/2 : ENTRYPOINT /bin/echo ---> Running in d53f31b93355 ---> 26dd06d2e5a5 Removing intermediate container d53f31b93355 Successfully built 26dd06d2e5a5 #运行镜像
docker文件copy
本地文件copy到容器中使用cp命令
docker cp 12345:/usr/local/log.txt /usr/local/
上面是从容器中copy到本地,如果从本地copy到容器中替换一下位置即可。
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏