首页 > 代码库 > 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学习笔记