docker容器

下载并安装

docker-engine-17.03.1.ce-1.el7.centos.x86_64.rpm
docker-engine-selinux-17.03.1.ce-1.el7.centos.noarch.rpm
并启docker
镜像命令

列出本地镜像

        docker images

                  docker images -a                 列出本地所有的镜像

                  docker images -q                 只显示ID

                  docker images -qa               列出所有的镜像ID

                  docker images --digests      显示镜像的摘要信息

                  docker images --no-trunc   显示完整的镜像信息

从 https://hub.docker.com 查找镜像

        docker images search (image name)

                   docker images search (-s 50 image name)                       查找星数大于50的指定镜像

                   docker images search (-s 50 --no-trunc image name)      查找星数大于50的指定镜像的详细信息

下载镜像

        docker pull (image name[: TAG])

删除某个镜像

        docker rmi (image name[: TAG])

                   docker rmi -f (image name[: TAG])                    强制删除

                   docker rmi -f $(docker images -qa)                   全部删除

Dockerfile构建docker镜像

        docker build -f Dockerfile -t imageName .

Docker重命名镜像REPOSITORY和TAG

        docker tag IMAGEID(镜像id) REPOSITORY:TAG
容器命令

新建并启动容器

        docker run [OPTIONS] IMAGE [COMMAND] [ARGS...]

                    OPTIONS:

                                     --name="容器名称":为容器指定一个名称

                                     -d:后台运行容器,并返回容器ID,即启动守护式容器

                                     -i:以交互模式运行容器,通常与-t同时使用

                                     -t:为容器重新分配一个伪输入终端,通常与-i同时使用

                                     -P:随机端口映射

                                     -p:指定端口映射,有以下四种格式:

                                             ip:hostPort:containerPort

                                             ip::containerPort

                                             hostPort:containerPort

                                             containerPort

                                     (例:docker run -it -p 8888:8080 tomcat         

                                        docker启动tomcat容器,8888为docker端口、8080为tomcat容器的端口,访问路径为docker端口,即IP:8888)

                    注:Docker容器后台运行就必须要有一个前台进程,容器运行命令如果不是一直挂起的命令(如:top,taail),会自动退出。

                           (docker run -d centos /bin/sh -c "while true; do echo hello; sleep 2;done",后台启动容器并持续交互)

列出当前所有正在运行的容器

        docker ps [OPTIONS]

                    OPTIONS:

                                     -a:列出当前所有正在运行的容器和历史运行过的容器

                                     -l:显示最近创建的容器

                                     -n args:显示最近n个创建的容器

                                     -q:静默模式,只显示容器编号

                                     --no-trunc:不截断输出

退出容器

        exit:容器停止退出

        ctrl+P+Q:容器不停止退出

启动容器

        docker start containerID | containerName

重启容器

        docker restart containerID | containerName

停止容器

        docker stop containerID | containerName

强制停止容器

        docker kill containerID | containerName

删除已停止容器

        docker rm containerID

查看容器日志

        docker logs -f -t --tail containerID

                    -t:加入时间戳

                    -f:跟随最新日志打印

                    -tail:数字 显示最后多少条

查看容器内运行的进程

        docker top containerID

查看容器内部细节

        docker inspect containerID

进入正在运行的容器并以命令行交互

        docker attach containerID                           直接进入容器命令终端,不会启动新的进程

        docker exec -t containerID (/bin/bash)        在容器中打开新的终端,并且可以启动新的进程

从容器内拷贝文件到宿主机

        docker cp containerID:容器内的路径 宿主机路径

提交容器副本使之成为新的镜像

        docker commit -a="author" -m="desc" containerID imageRepository
[root@foundation19 ~]# docker version 
Client:
 Version:      17.03.1-ce
 API version:  1.27
 Go version:   go1.7.5
 Git commit:   c6d412e
 Built:        Fri Mar 24 00:36:45 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.03.1-ce
 API version:  1.27 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   c6d412e
 Built:        Fri Mar 24 00:36:45 2017
 OS/Arch:      linux/amd64
 Experimental: false
[root@foundation19 ~]# docker load -i game2048.tar   #导入镜像
011b303988d2: Loading layer  5.05 MB/5.05 MB
36e9226e74f8: Loading layer 51.46 MB/51.46 MB
192e9fad2abc: Loading layer 3.584 kB/3.584 kB
6d7504772167: Loading layer 4.608 kB/4.608 kB
88fca8ae768a: Loading layer 629.8 kB/629.8 kB
Loaded image: game2048:latest
[root@foundation19 ~]# docker 
build      export     kill       plugin     rmi        stats      version
commit     help       load       port       run        stop       volume
container  history    login      ps         save       swarm      wait
cp         image      logout     pull       search     system     
create     images     logs       push       secret     tag        
diff       import     network    rename     service    top        
events     info       node       restart    stack      unpause    
exec       inspect    pause      rm         start      update     
[root@foundation19 ~]# docker images   #查看导入的镜像
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
game2048            latest              19299002fdbe        19 months ago       55.5 MB
[root@foundation19 ~]# docker run -d #后台运行 --name vm1  game2048 #创建并运行容器使用game2048镜像
5f495832c9137668f34c12c00558166c414a8a5560df615a27e8f4a322ef7836
[root@foundation19 ~]# docker inspect vm1

docker镜像放置在docker仓库中,通过镜像生成容器,容器内东西通过镜像储存在仓库之中

[root@foundation19 ~]# docker run -d --name vm1 -v /root/aaa/:/usr/share/nginx/html nginx #将这个目录挂载在容器的/usr/share/nginx/html下
8c2a960d8d70705e610671106ceec5a11129df5c788d12d7fa575584e72140a6

网络管理
Docker 在启动时会创建一个虚拟网桥 docker0,默认地址为 172.17.42.1/16, 容器启动后都会
被桥接到 docker0 上,并自动分配到一个 IP 地址。

端口印射

[root@foundation19 ~]# docker run -d --name vm1 -p 8080:80 nginx
6554c64ce9258666a4b8068e94bd3747ed485d8b5b27a92d270da26ec2bff94f
[root@foundation19 ~]# iptables -t nat -nL   #iptables查看端口数据走向
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DOCKER     all  --  0.0.0.0/0            0.0.0.0/0            ADDRTYPE match dst-type LOCAL

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
DOCKER     all  --  0.0.0.0/0           !127.0.0.0/8          ADDRTYPE match dst-type LOCAL

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
MASQUERADE  all  --  172.17.0.0/16        0.0.0.0/0           
RETURN     all  --  192.168.122.0/24     224.0.0.0/24        
RETURN     all  --  192.168.122.0/24     255.255.255.255     
MASQUERADE  tcp  --  192.168.122.0/24    !192.168.122.0/24     masq ports: 1024-65535
MASQUERADE  udp  --  192.168.122.0/24    !192.168.122.0/24     masq ports: 1024-65535
MASQUERADE  all  --  192.168.122.0/24    !192.168.122.0/24    
MASQUERADE  tcp  --  172.17.0.2           172.17.0.2           tcp dpt:80

Chain DOCKER (2 references)
target     prot opt source               destination         
RETURN     all  --  0.0.0.0/0            0.0.0.0/0           
DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8080 to:172.17.0.2:80 ##在这里 8080到80的映射

容器间的互联

vm1时nginx的服务容器
[root@foundation19 ~]# docker run -it --name vm2 --link vm1:nginx ubuntu #it交互式登陆
root@989b9a05dbeb:/# ls
cbin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr
root@989b9a05dbeb:/# env #环境变量
HOSTNAME=989b9a05dbeb
TERM=xterm
NGINX_ENV_NJS_VERSION=1.15.2.0.2.2-1~stretch
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:
NGINX_ENV_NGINX_VERSION=1.15.2-1~stretch
NGINX_NAME=/vm2/nginx
NGINX_PORT_80_TCP_PROTO=tcp
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
SHLVL=1
HOME=/root
NGINX_PORT_80_TCP=tcp://172.17.0.2:80
NGINX_PORT_80_TCP_PORT=80
LESSOPEN=| /usr/bin/lesspipe %s
NGINX_PORT_80_TCP_ADDR=172.17.0.2
LESSCLOSE=/usr/bin/lesspipe %s %s
NGINX_PORT=tcp://172.17.0.2:80
_=/usr/bin/env
root@989b9a05dbeb:/# cat /etc/hosts 
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2  nginx 6554c64ce925 vm1
172.17.0.3  989b9a05dbeb
root@989b9a05dbeb:/# ping nginx
PING nginx (172.17.0.2) 56(84) bytes of data.
64 bytes from nginx (172.17.0.2): icmp_seq=1 ttl=64 time=0.100 ms
64 bytes from nginx (172.17.0.2): icmp_seq=2 ttl=64 time=0.096 ms
64 bytes from nginx (172.17.0.2): icmp_seq=3 ttl=64 time=0.093 ms
[root@foundation19 tmp]# mkdir docker
[root@foundation19 tmp]# cd docker/
[root@foundation19 docker]# 
[root@foundation19 docker]# vim Dcokerfile
[root@foundation19 docker]# vim Dokerfilec^C
[root@foundation19 docker]# mv Dcokerfile Dokerfile 
[root@foundation19 docker]# vim Dokerfile 
[root@foundation19 docker]# mv Dokerfile Dockerfile 
[root@foundation19 docker]# vim Dockerfile 
[root@foundation19 docker]# vim Dockerfile 
[root@foundation19 docker]# cp /etc/yum.repos.d/rhel-dvd.repo ./dvd.repo
[root@foundation19 docker]# ls
Dockerfile  dvd.repo
[root@foundation19 docker]# vim dvd.repo 
[root@foundation19 docker]# vim dvd.repo 
[root@foundation19 docker]# vim dvd.repo 
[root@foundation19 docker]# ping 172.17.0.1
PING 172.17.0.1 (172.17.0.1) 56(84) bytes of data.
64 bytes from 172.17.0.1: icmp_seq=1 ttl=64 time=0.049 ms
^C
--- 172.17.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.049/0.049/0.049/0.000 ms
[root@foundation19 docker]# 
[root@foundation19 docker]# ls
Dockerfile  dvd.repo
[root@foundation19 docker]# docker build -t rhel7:v1 .
[root@foundation19 docker]# cat Dockerfile 
FROM rhel7
ENV HOSTNAME server1
EXPOSE 80
COPY dvd.repo /etc/yum.repos.d/dvd.repo
RUN rpmdb --rebuilddb && yum install -y httpd && yum clean all
VOLUME ["/var/www/html"]
CMD ["/usr/sbin/httpd","-D","FOREGROUND"]

docker registry带ssl认证的私有仓库搭建
1.首先docker pull registry默认下载最新版的镜像
2.这边考虑私有仓库部署的服务器可能没有网络,可以使用docker save -o registry.tar registry:2.6.2保存一个镜像,然后把registry.tar打包到部署包里面,下次使用docker load -i registry.tar加载到本地镜像
3.保证ssl已安装,且/ect/ssl/openssl.cnf中关于生成密码定义的字段都有(网上可以查)
1. 制作证书,可采用OPENSSL

在ROOT下执行,把证书保存在/root/certs目录下

openssl req -newkey rsa:2048 -nodes -sha256 -keyout /root/certs/domain.key -x509 -days 365 -out /root/certs/domain.crt
  1. 把证书COPY到:

    自签名证书,使用Docker Registry的Docker机需要将domain.crt拷贝到 /etc/docker/certs.d/[docker_registry_domain]/ca.crt,

    cp certs/domain.crt /etc/docker/certs.d/mydockerhub.com:5000/ca.crt

将domain.crt内容放入系统的CA bundle文件当中,使操作系统信任我们的自签名证书。
CentOS 6 / 7中bundle文件的位置在/etc/pki/tls/certs/ca-bundle.crt
cat domain.crt >> /etc/pki/tls/certs/ca-bundle.crt
untu/Debian Bundle文件地址/etc/ssl/certs/ca-certificates.crt

cat domain.crt >> /etc/ssl/certs/ca-certificates.crt
  1. 启动DOCKER REGISTRY
docker run -d -p 5000:5000 --privileged=true -v /opt/registry:/tmp/registry -v ~/certs/:/root/certs  -e REGISTRY_HTTP_TLS_CERTIFICATE=/root/certs/domain.crt -e REGISTRY_HTTP_TLS_KEY=/root/certs/domain.key registry
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值