docker学习笔记
Posted ld1977
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker学习笔记相关的知识,希望对你有一定的参考价值。
docker ps -a 查看当前系统中容器的列表
docker ps命令,只能看到正在运行的容器,如果指定-a,命令会列出所有容器,包括运行和停止的,-l标志,会列出最后一次运行的容器。
docker run -i -t 容器/镜像名 运行容器
-i:标志保证容器中stdin是开启的。
-t:为要创建的容器分配一个伪终端
容器器内
cat /etc/hosts 查看容器网络配置
#ip a 查看ip地址
[email protected]:/# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 18184 2072 ? Ss 06:10 0:00 /bin/bash
root 18 0.0 0.1 34364 1556 ? R+ 06:22 0:00 ps -aux
yum install vim
[email protected]:/# apt-get update && apt-get install vim
exit退出
docker ps 命令查看运行的容器
docker ps -a 命令查看当前系统中容器的列表。
docker ps -l列出最后一次运行的容器
--name为容器指定一个名称
docker run --name bob_the_container -i -t ubuntu /bin/bash
重新启动已经停止的容器:
docker start bob_the_container
docker start aa3f365f0f4e
3.6 附着到容器上
docker attach命令:
docker attach bob_the_container
docker attach aa3f365f0f4e
[[email protected] ~]# docker attach zabbix_container
[[email protected] /]#
创建守护式容器:
[[email protected] ~]# docker run -d centos /bin/sh -c "while true;do echo hello world;sleep 1; dond"
8cd580475b1a7f67db4fff1dd83d0607578b584ff0f4ea1ff2d5e341aaf7a24d
[[email protected] ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4fcce3d2c8e9 centos "/bin/sh -c ‘while tr" 9 seconds ago Up 5 seconds dreamy_varahamihira
容器内部都在干些什么
docker logs
[[email protected] ~]# docker logs dreamy_varahamihira
hello world
hello world
hello world
hello world
hello world
hello world
-f参数类似tail -f
docker logs -f ....
--tail 10
--tail 0 -f
-t加时间戳
docker logs -ft ....
3.9查看容器内进程:
docker top
[[email protected] ~]# docker top dreamy_varahamihira
UID PID PPID C STIME TTY TIME CMD
root 15271 56038 0 14:23 ? 00:00:00 /bin/sh -c while true;do echo hello world;sleep 1; done
3.10 在容器内部运行进程
exec在容器内部启动新进程
[[email protected] ~]# docker start zabbix_container
zabbix_container
[[email protected] ~]# docker exec -d zabbix_container touch /etc/new_config_file
[[email protected] ~]#
3.11停止守护式容器:
[[email protected] ~]# docker stop ubuntu
ubuntu
3.12 自动重启容器:--restart
3.13 深入容器:docker inspect
[[email protected] ~]# docker inspect zabbix_container
用-f或者--format标志来选定查看结果:
[[email protected] ~]# docker inspect --format=‘{{.State.Running}}‘ ubuntu
false
获取IP地址
[[email protected] ~]# docker inspect --format=‘{{.NetworkSettings.IPAddress}}‘ ubuntu
3.14删除容器:
docker rm
删除全部容器:
docker rm `docker ps -a -q`
4.使用docker镜像和仓库
[[email protected] ~]# docker run -i -t --name another_container_mum ubuntu /bin/bash
启动一个新的名字为another_container_mum的容器,这个容器基于ubuntu镜像并且会启动bash shell
4.1
镜像保存在宿主机的/var/lib/docker目录下。
ubuntu:12.03可以使用冒号加标签指定镜像。
[[email protected] ~]# docker run -t -i --name new_container ubuntu:latest /bin/bash
4.3拉取镜像
docker pull fedora 默认下载lasted
docker images fedora
4.4查找镜像
[[email protected] ~]# docker search puppet
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
macadmins/puppetmaster Simple puppetmaster based on CentOS 6 23 [OK]
devopsil/puppet Dockerfile for a container with puppet ins... 20 [OK]
macadmins/munki-puppet Basic munki nginx image with Puppet used f... 7 [OK]
。。。
4.5构建镜像
docker commit 不推荐使用,应该使用更灵活、更强大的dockerfile来构建镜像。
docker build
dockerfile
4.5.2用docker的commit命令创建镜像
[[email protected] ~]# docker run -i -t ubuntu /bin/bash
[email protected]:/# apt-get -yqq update
[email protected]:/# apt-get -y install apache2
[[email protected] ~]# docker commit eb366887a548 jamtur01/apache2
4ff6b633df04c2dc65e59623982ddeb85b2fe09c0780b44df91658788074b179
[[email protected] ~]# docker ps -l -q #查看新提交的镜像id
eb366887a548
[[email protected] ~]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
jamtur01/apache2 latest 4ff6b633df04 49 seconds ago 265.4 MB
monitoringartist/zabbix-3.0-xxl latest 889e37e6ae58 5 days ago 818.1 MB
提交的只是更新
可以在提交时,指定更多的数据(包括标签)来描述修改
[[email protected] ~]# docker commit -m="A new custom image" --author="James Turnbull" eb366887a548 jamtur01/apache2:webserver
jamtur01/apache2 latest 4ff6b633df04 7 minutes ago 265.4 MB
[[email protected] ~]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
jamtur01/apache2 webserver 31c6572a159d 33 seconds ago 265.4 MB
jamtur01/apache2 latest 4ff6b633df04 8 minutes ago 265.4 MB
[[email protected] ~]# docker inspect jamtur01/apache2:webserver 查看镜像详细信息
4.5.3用dockerfile构建镜像
[[email protected] ~]# mkdir static_web
[[email protected] ~]# cd static_web/ #用来保存dockerfile,此目录是我们的构建环境,docker称为上下文或构建上下文
[[email protected] static_web]# touch Dockerfile
[[email protected] static_web]# vim Dockerfile
#Version:0.0.1
FROM ubuntu:latest
MAINTAINER James Turnbull "[email protected]"
RUN apt-get update
RUN apt-get install -y nginx
RUN echo ‘Hi,I am your container‘ \
>/usr/share/nginx/html/index.html
EXPOSE 80
4.5.4基于Dockerfile构建新镜像
#构建名字为jamtur01/static_web的镜像,“."代表上本地目录找Dockerfile文件,也可以指定git仓库的源地址
[[email protected] static_web]# docker build -t="jamtur01/static_web" .
#事标签
[[email protected] static_web]# docker build -t="jamtur01/static_web:v1" .
#git仓库地址:
[[email protected] static_web]# docker build -t="jamtur01/static_web:v1" [email protected]:jamtur01/docker-static_web
[[email protected] static_web]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
jamtur01/static_web latest b26970c43567 About a minute ago 223.1 MB
4.5.5指令失败时会怎样
doker run命令来基于这次构建到目前为止已经成功的最后一步创建一个容器。
如:docker run -t -i 997485f46ec4 /bin/bash
4.5.6 dockerfile和构建缓存
docker build --no-cache标志
4.5.7 基于构建缓存的Dockerfile模板
4.5.8 查看新镜像
深入探求镜像是如何构建的,使用docker history命令
[[email protected] static_web]# docker history b26970c43567
IMAGE CREATED CREATED BY SIZE COMMENT
b26970c43567 6 minutes ago /bin/sh -c #(nop) EXPOSE 80/tcp 0 B
5c263b4c07ca 7 minutes ago /bin/sh -c echo ‘Hi,I am your container‘ 23 B
a8ebe37e8ab4 7 minutes ago /bin/sh -c apt-get install -y nginx 56.81 MB
9662e7183b93 12 minutes ago /bin/sh -c apt-get update 39.19 MB
d65eef9b1448 18 minutes ago /bin/sh -c #(nop) MAINTAINER James Turnbull " 0 B
56465e1e45d2 2 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B
c53777cbfc31 2 weeks ago /bin/sh -c mkdir -p /run/systemd && echo ‘doc 7 B
6ed49a73d8f0 2 weeks ago /bin/sh -c sed -i ‘s/^#\s*\(deb.*universe\)$/ 1.895 kB
6571ba684f54 2 weeks ago /bin/sh -c rm -rf /var/lib/apt/lists/* 0 B
25810b66099e 2 weeks ago /bin/sh -c set -xe && echo ‘#!/bin/sh‘ > /u 745 B
58488e45273c 2 weeks ago /bin/sh -c #(nop) ADD file:b1cd0e54ba28cb1d6d 127.1 MB
4.5.9 从新镜像启动容器:
[[email protected] static_web]# docker run -d -p 80 --name static_web jamtur01/static_web nginx -g "daemon off;"
-p可以灵活映射,如:
docker run -d -p 80:80 --name static_web jamtur01/static_web nginx -g "daemon off;"
9734c6c26b19bc3f5ea241b2317bb992bd113131096102c1d5c171b2bde4708a
查看容器端口分配情况:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9734c6c26b19 jamtur01/static_web "nginx -g ‘daemon of About a minute ago Up About a minute 0.0.0.0:32768->80/tcp static_web
宿主机的32768映射到容器的80端口
也可以使用docker port命令:
[[email protected] static_web]# docker port 9734c6c26b19
80/tcp -> 0.0.0.0:32768
http://10.2.0.193:32768/ 可以打开nginx
4.5.10 dockerfile其他指令
1.cmd :指定窗口被启动时要运行的命令
2.ENTRYPOINT
3.WORKDIR:用来在从镜像创建一个容器时,在容器内部设置一个工作目录,ENTTRYPOINT或CMD指定的程序会在这个目录下执行。
4.ENV,用来在镜像构建过程中设置环境变量
也可以使用docker run命令的-e标志来传递环境变量。
5.USER :用于指定该镜像会以什么用户运行。
6.VOLUME:用来向基于镜像创建的容器添加卷。可以存在于一个或者多个容器内的特定目录。
7.ADD:用来将构建环境下的文件和目录复制到镜像中。
8.COPY
9.ONBUILD:为镜像添加触发器
4.6将镜像推送到Docker Hub
docker push jamtur01/static_web
自动构建:
4.7删除镜像
[[email protected] ~]# docker rmi 4ff6b633df04
4.8运行自己的docker registry
4.8.1从容器运行registry
[[email protected] ~]# docker run -p 5000:5000 registry
创建一个运行registry的容器,绑定到5000端口
4.8.2测试新Registry
4.9其他可选Registry服务
5.在测试中使用Docker
搭建ningx测试环境
[[email protected] ~]# mkdir sample
[[email protected] ~]# cd sample
[[email protected] sample]# touch Dockerfile
[[email protected] sample]# mkdir nginx && cd nginx
[[email protected] sample]# docker build -t jamtur01/nginx .
5.1.3从Sample网站和Nginx镜像构建容器
[[email protected] sample]# mkdir website && cd website
[[email protected] website]# docker run -d -p 80 --name website -v $PWD/website:/var/www/html/website jamtur01/nginx nginx
-v 允许我们将宿主机的目录作为卷,挂载到容器里。
5.2使用docker构建并测试web应用程序
5.2.3构建redis镜像和容器:
5.2.4连接到redis容器
[[email protected] website]# ip a show docker0
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
link/ether 06:29:16:c5:e6:5d brd ff:ff:ff:ff:ff:ff
inet 172.17.42.1/16 scope global docker0
inet6 fe80::a4cf:aff:fef2:784c/64 scope link
valid_lft forever preferred_lft forever
113页
以上是关于docker学习笔记的主要内容,如果未能解决你的问题,请参考以下文章