首页 > 代码库 > docker学习笔记
docker学习笔记
docker ps -a 查看当前系统中容器的列表
docker ps命令,只能看到正在运行的容器,如果指定-a,命令会列出所有容器,包括运行和停止的,-l标志,会列出最后一次运行的容器。
docker run -i -t 容器/镜像名 运行容器
-i:标志保证容器中stdin是开启的。
-t:为要创建的容器分配一个伪终端
容器器内
cat /etc/hosts 查看容器网络配置
#ip a 查看ip地址
root@7ff751e1bade:/# 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
root@7ff751e1bade:/# 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
[root@docker ~]# docker attach zabbix_container
[root@203b1ed9e19a /]#
创建守护式容器:
[root@testzabbix ~]# docker run -d centos /bin/sh -c "while true;do echo hello world;sleep 1; dond"
8cd580475b1a7f67db4fff1dd83d0607578b584ff0f4ea1ff2d5e341aaf7a24d
[root@testzabbix ~]# 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
[root@testzabbix ~]# 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
[root@testzabbix ~]# 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在容器内部启动新进程
[root@docker ~]# docker start zabbix_container
zabbix_container
[root@docker ~]# docker exec -d zabbix_container touch /etc/new_config_file
[root@docker ~]#
3.11停止守护式容器:
[root@docker ~]# docker stop ubuntu
ubuntu
3.12 自动重启容器:--restart
3.13 深入容器:docker inspect
[root@docker ~]# docker inspect zabbix_container
用-f或者--format标志来选定查看结果:
[root@docker ~]# docker inspect --format=‘{{.State.Running}}‘ ubuntu
false
获取IP地址
[root@docker ~]# docker inspect --format=‘{{.NetworkSettings.IPAddress}}‘ ubuntu
3.14删除容器:
docker rm
删除全部容器:
docker rm `docker ps -a -q`
4.使用docker镜像和仓库
[root@docker ~]# docker run -i -t --name another_container_mum ubuntu /bin/bash
root@1c9d869cc4b0:/#
启动一个新的名字为another_container_mum的容器,这个容器基于ubuntu镜像并且会启动bash shell
4.1
镜像保存在宿主机的/var/lib/docker目录下。
ubuntu:12.03可以使用冒号加标签指定镜像。
[root@docker ~]# docker run -t -i --name new_container ubuntu:latest /bin/bash
4.3拉取镜像
docker pull fedora 默认下载lasted
docker images fedora
4.4查找镜像
[root@docker ~]# 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命令创建镜像
[root@docker ~]# docker run -i -t ubuntu /bin/bash
root@eb366887a548:/# apt-get -yqq update
root@eb366887a548:/# apt-get -y install apache2
[root@docker ~]# docker commit eb366887a548 jamtur01/apache2
4ff6b633df04c2dc65e59623982ddeb85b2fe09c0780b44df91658788074b179
[root@docker ~]# docker ps -l -q #查看新提交的镜像id
eb366887a548
[root@docker ~]# 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
提交的只是更新
可以在提交时,指定更多的数据(包括标签)来描述修改
[root@docker ~]# docker commit -m="A new custom image" --author="James Turnbull" eb366887a548 jamtur01/apache2:webserver
jamtur01/apache2 latest 4ff6b633df04 7 minutes ago 265.4 MB
[root@docker ~]# 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
[root@docker ~]# docker inspect jamtur01/apache2:webserver 查看镜像详细信息
4.5.3用dockerfile构建镜像
[root@docker ~]# mkdir static_web
[root@docker ~]# cd static_web/ #用来保存dockerfile,此目录是我们的构建环境,docker称为上下文或构建上下文
[root@docker static_web]# touch Dockerfile
[root@docker static_web]# vim Dockerfile
#Version:0.0.1
FROM ubuntu:latest
MAINTAINER James Turnbull "james@example.com"
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仓库的源地址
[root@docker static_web]# docker build -t="jamtur01/static_web" .
#事标签
[root@docker static_web]# docker build -t="jamtur01/static_web:v1" .
#git仓库地址:
[root@docker static_web]# docker build -t="jamtur01/static_web:v1" git@github.com:jamtur01/docker-static_web
[root@docker 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命令
[root@docker 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 从新镜像启动容器:
[root@docker 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命令:
[root@docker static_web]# docker port 9734c6c26b19
80/tcp -> 0.0.0.0:32768
http://10.2.0.193:32768/ 可以打开nginx
4.5.10 dockerfile其他指令
https://docs.docker.com/engine/reference/builder/ 中查询指令
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删除镜像
[root@docker ~]# docker rmi 4ff6b633df04
4.8运行自己的docker registry
4.8.1从容器运行registry
[root@docker ~]# docker run -p 5000:5000 registry
创建一个运行registry的容器,绑定到5000端口
4.8.2测试新Registry
4.9其他可选Registry服务
5.在测试中使用Docker
搭建ningx测试环境
[root@docker ~]# mkdir sample
[root@docker ~]# cd sample
[root@docker sample]# touch Dockerfile
[root@docker sample]# mkdir nginx && cd nginx
[root@docker nginx]# wget https://raw.githubusercontent.com/jamtur01/dockerbook-code/master/code/5/sample/nginx/global.conf
[root@docker nginx]# wget https://raw.githubusercontent.com/jamtur01/dockerbook-code/master/code/5/sample/nginx/nginx.conf
[root@docker sample]# docker build -t jamtur01/nginx .
5.1.3从Sample网站和Nginx镜像构建容器
[root@docker sample]# mkdir website && cd website
[root@docker website]# wget https://raw.githubusercontent.com/jamtur01/dockerbook-code/master/code/5/sample/website/index.html
[root@docker 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容器
[root@docker 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学习笔记
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。