docker 实战练习1

docker search centos                                       # 查找源中镜像
docker pull centos:6                                       # 从官方下载centos的docker镜像

docker images                                              # 查看docker镜像
docker ps                                                  # 查看docker启动的容器
docker ps -a                                               # 查看docker所有容器 包括未启动的


docker run -d -t -i centos:6 /bin/bash                     # 启动docker隔离的容器 -t 让Docker分配一个伪终端,并绑定到容器的标准输入上. -i 则让容器的标准输入保持打开. -d 守护进程
docker attach ID                                           # 进入后台的容器 指定容器ID   # util-linux 也可以进入容器
docker logs ID                                             # 获取容器内输出信息

docker stop ID                                             # 停止已启动的容器
docker start ID                                            # 启动已停止的容器
docker restart ID                                          # 重启容器

docker export 7691a814370e > centos_a.tar                  # 导出容器快照到本地
cat centos_a.tar | docker import - test/centos_a:v1.0      # 从容器快照文件中再导入为镜像

docker save -o centos.6.tar centos:6                       # 保存镜像到文件
docker load --input centos.6.tar                           # 载入镜像文件

docker rm 容器ID                                           # 删除终止状态的容器   加-f强制终止运行中的容器
docker rmi test/centos_a:v1.0                              # 移除本地镜像   在删除镜像之前要先用 docker rm 删掉依赖于这个镜像的所有容器


brctl show                                                 # 查看网桥

docker pull library/nginx

docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -d nginx

mkdir testa                            # 创建静态资源目录
vim testa/a.txt
aaaaaa

vim Dockerfile                         # 创建 Dockerfile 文件
FROM nginx
COPY testa /usr/share/nginx/html       # 拷贝前面创建的静态资源目录

# Dockerfile用来创建一个自定义的image,包含了用户指定的软件依赖等。当前目录下包含Dockerfile,使用命令build来创建新的image,并命名为 some-content-nginx
docker build -t some-content-nginx .

docker run --name some-nginx -d some-content-nginx

docker run --name some-nginx-test1 -d -p 8080:80 some-content-nginx             # 暴漏端口的方式

docker run -d --name db training/postgres
docker run -d -P --name web --link db:db training/webapp python app.py          # 新建立容器,并连接db容器   --link name:alias

docker search mysql --搜索镜像
docker pull docker.io/mysql --下载镜像
docker images --查看下载的镜像
docker tag docker.io/mysql mysql8:new --给镜像加标签
docker inspect d06c3c789716 --查看镜像的详细信息
docker rmi mysql8:new --删除镜像,注意如果用容器使用这个镜像,先删除容器,再删除镜像

在已有的镜像上面添加新内容
docker run -ti docker.io/centos /bin/bash 先进入容器,记住容器的id
[root@localhost ~]# docker run -ti docker.io/centos /bin/bash
[root@fafd0c8100ce /]# 
[root@fafd0c8100ce /]# touch my.txt
[root@fafd0c8100ce /]# echo 1111111>my.txt 
bash: 1111111: Bad file descriptor
[root@fafd0c8100ce /]# echo "1111111">my.txt 
[root@fafd0c8100ce /]# 
[root@fafd0c8100ce /]# exit
exit
在容器里面创建一个文件,并输入1111111
[root@localhost ~]# docker commit -m "create a new file" -a "dandh" fafd0c8100ce centos:new  
sha256:d7ed49fd9b7df6692ffff18c7bc21faa5509e425804d9dd441a0d3936d25e42a
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              new                 d7ed49fd9b7d        41 seconds ago      274 MB
docker.io/mysql     latest              d06c3c789716        28 hours ago        477 MB
docker.io/centos    latest              1e1148e4cc2c        6 weeks ago         202 MB
这里可以看出多了一个镜像,第一行,我们可以运行下容器看下,看下里面的文件还在不在
[root@localhost ~]# docker run -ti d7ed49fd9b7d /bin/bash
[root@15f188d20362 /]# ls
anaconda-post.log  bin  dev  etc  home  lib  lib64  media  mnt  my.txt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@15f188d20362 /]# cat my.txt 
1111111
[root@15f188d20362 /]# 
这样看来没有问题

镜像的导入和导出
[root@localhost ~]# docker save -o mysql.tar docker.io/mysql:latest
[root@localhost ~]# ll
总用量 470748
-rw-------. 1 root root      1258 1月  22 17:26 anaconda-ks.cfg
-rw-------. 1 root root 482041344 1月  23 10:25 mysql.tar
我先删除mysql镜像,再从mysql.tar导入试下,记录镜像id
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              new                 d7ed49fd9b7d        17 minutes ago      274 MB
docker.io/mysql     latest              d06c3c789716        29 hours ago        477 MB
docker.io/centos    latest              1e1148e4cc2c        6 weeks ago         202 MB
[root@localhost ~]# 
[root@localhost ~]# docker rmi d06c3c789716
Untagged: docker.io/mysql:latest
Deleted: sha256:d06c3c789716edfe9bf07bca224741bc61d096068753c57b2bf9ac9e6e37ce0c
Deleted: sha256:32e2321f2dfd47d088f46a0162cf1349cd787a2b81e7623df191d67daf62afbb
Deleted: sha256:7bcb817b23dcb5b87062cf2386413bc043a52c9b814ba82f748278243ece3df1
Deleted: sha256:07048bf3471f3b68a7ad81f3bbc851165996c4ee639c12934198298b7e898dd3
Deleted: sha256:6f8adf09b7c4323c8fc1c26887bab159688aa66543e951c3115c12601e821e67
Deleted: sha256:b5b2c699cca2c5cc6adf56db40d0dce427099c69189daf267c7563ec27db8bf5
Deleted: sha256:e4e5e2c13bfc19ea0b7931fe111b490026c943d49b9b0fc658134bc168f8f4f0
Deleted: sha256:6cc2a43de520c5c2fb3308ecc23cb93e5ca4e40c2c5c781825572f1dcfc12010
Deleted: sha256:41a87a1b83603cb4cbd7b95fe803ab3c37f5cf1fda058361a89108f5ae6f33cb
Deleted: sha256:fb70646553d25ffeca12296dd9ef69cc6a61567d4636adf41c195ceaa7d91bba
Deleted: sha256:044ab08434546e6569ed9ac43200e0c696c38751e1eb88748063256183beecf9
Deleted: sha256:8de920f11cbdc968c39f60866eaea7e60b3f60e76fca76d585a11ee5a872322d
Deleted: sha256:7b4e562e58dcb7fbe1e27bb274f0ff8bfeb2fd965203380436e159df9f218900
[root@localhost ~]# 
导入镜像
[root@localhost ~]# docker load <mysql.tar 
7b4e562e58dc: Loading layer [==================================================>] 58.44 MB/58.44 MB
f01f1a2037eb: Loading layer [==================================================>] 338.4 kB/338.4 kB
b718c6b527ab: Loading layer [==================================================>] 10.44 MB/10.44 MB
6680e06777c4: Loading layer [==================================================>] 4.471 MB/4.471 MB
047cc8a3632b: Loading layer [==================================================>] 1.536 kB/1.536 kB
9c976f26b06d: Loading layer [==================================================>] 46.15 MB/46.15 MB
31c1ae796cfa: Loading layer [==================================================>] 30.72 kB/30.72 kB
fbe94c6b114f: Loading layer [==================================================>] 3.584 kB/3.584 kB
36ceffc9bf1e: Loading layer [==================================================>] 362.1 MB/362.1 MB
bfa4bad6b620: Loading layer [==================================================>] 5.632 kB/5.632 kB
d8e5a8556c8a: Loading layer [==================================================>] 9.728 kB/9.728 kB
a41846c12aba: Loading layer [==================================================>] 1.536 kB/1.536 kB
Loaded image: docker.io/mysql:latest
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              new                 d7ed49fd9b7d        21 minutes ago      274 MB
docker.io/mysql     latest              d06c3c789716        29 hours ago        477 MB
docker.io/centos    latest              1e1148e4cc2c        6 weeks ago         202 MB
[root@localhost ~]# 
ok,完美实现镜像的导入和导出
docker push --上传自己的镜像到仓库,要先登录仓库


2,容器
创建一个空的容器
docker create -ti centos:7 --创建容器
docker ps -a  查看所有容器
docker ps    --正在运行的容器
docker logs 15f188d20362 --查看容器日志
docker stop 15f188d20362 --终止容器
docker start 15f188d20362 --启动容器
docker restart 15f188d20362 --重启容器
docker attach 183f23fe4772 --进入容器
docker rm dfc0cca8fe24 --删除容器
docker exec -ti 183f23fe4772 /bin/bash --进入容器
导入和导入容器
[root@localhost ~]# docker export 18 >centis.run.tar
[root@localhost ~]# ll
总用量 723696
-rw-------. 1 root root      1258 1月  22 17:26 anaconda-ks.cfg
-rw-r--r--. 1 root root 259016192 1月  23 11:10 centis.run.tar
-rw-------. 1 root root 482041344 1月  23 10:25 mysql.tar
[root@localhost ~]# 
[root@localhost ~]# docker export 15 >centis.stop.tar
[root@localhost ~]# ll
总用量 976644
-rw-------. 1 root root      1258 1月  22 17:26 anaconda-ks.cfg
-rw-r--r--. 1 root root 259016192 1月  23 11:10 centis.run.tar
-rw-r--r--. 1 root root 259016192 1月  23 11:12 centis.stop.tar
-rw-------. 1 root root 482041344 1月  23 10:25 mysql.tar
[root@localhost ~]# 
导入容器
[root@localhost ~]# cat centis.stop.tar |docker import - centos/7
sha256:0c99ed1dff937157e38a96bd955e9ed5ef26bc704296a84b5053902b499cda7c
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos/7            latest              0c99ed1dff93        36 seconds ago      250 MB
centos              new                 d7ed49fd9b7d        About an hour ago   274 MB
docker.io/mysql     latest              d06c3c789716        29 hours ago        477 MB
docker.io/centos    7                   1e1148e4cc2c        6 weeks ago         202 MB
docker.io/centos    latest              1e1148e4cc2c        6 weeks ago         202 MB
容器导入导出ok了


3,仓库
创建一个私有仓库
docker run -d -p 5000:5000 registry

4,数据管理
数据库卷的使用类似与linux的mount
先查看mysql镜像的信息
docker inspect docker.io/mysql:latest --查看到镜像里面mysql的data目录是/var/lib/mysql
先创建mysql的配置文件目录和数据目录
[root@localhost /]# mkdir /data
[root@localhost /]# mkdir /mysqlconf
启动mysql容器
[root@localhost /]# docker run -p 3306:3306 --name mysql8.0 -v /mysqlconf:/etc/mysql/conf.d -v /mysqldata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=654321 -d d06c3c789716
48bfb6060a7e4178280873e24295aa7611e75ef4412f601d2c4830250a967a0e
[root@localhost /]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
48bfb6060a7e        d06c3c789716        "docker-entrypoint..."   6 seconds ago       Up 6 seconds        0.0.0.0:3306->3306/tcp, 33060/tcp   mysql8.0
09e7e5bc28f0        registry            "/entrypoint.sh /e..."   41 minutes ago      Up 41 minutes       0.0.0.0:5000->5000/tcp              hungry_austin
183f23fe4772        d7ed49fd9b7d        "/bin/bash"              About an hour ago   Up About an hour                                        infallible_brattain
[root@localhost /]# ls /mysqldata/
auto.cnf       binlog.000002  ca-key.pem  client-cert.pem  ib_buffer_pool  ib_logfile0  ibtmp1        mysql      performance_schema  public_key.pem   server-key.pem  undo_001
binlog.000001  binlog.index   ca.pem      client-key.pem   ibdata1         ib_logfile1  #innodb_temp  mysql.ibd  private_key.pem     server-cert.pem  sys             undo_002
进入容器
[root@localhost mysqldata]# docker exec -it 48bfb6060a7e /bin/bash
root@48bfb6060a7e:/# 
root@48bfb6060a7e:/# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.14 MySQL Community Server - GPL

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 
授权外部链接
create database mydb default charset utf8;
ok,测试没有问题
[root@localhost ~]# cd /mysqldata/
[root@localhost mysqldata]# ll
总用量 179196
-rw-r-----. 1 polkitd input       56 1月  23 11:58 auto.cnf
-rw-r-----. 1 polkitd input  3073845 1月  23 12:00 binlog.000001
-rw-r-----. 1 polkitd input      199 1月  23 12:07 binlog.000002
-rw-r-----. 1 polkitd input      359 1月  23 12:28 binlog.000003
-rw-r-----. 1 polkitd input       48 1月  23 12:07 binlog.index
-rw-------. 1 polkitd input     1680 1月  23 11:58 ca-key.pem
-rw-r--r--. 1 polkitd input     1112 1月  23 11:58 ca.pem
-rw-r--r--. 1 polkitd input     1112 1月  23 11:58 client-cert.pem
-rw-------. 1 polkitd input     1676 1月  23 11:58 client-key.pem
-rw-r-----. 1 polkitd input     5949 1月  23 12:00 ib_buffer_pool
-rw-r-----. 1 polkitd input 12582912 1月  23 12:28 ibdata1
-rw-r-----. 1 polkitd input 50331648 1月  23 12:28 ib_logfile0
-rw-r-----. 1 polkitd input 50331648 1月  23 11:56 ib_logfile1
-rw-r-----. 1 polkitd input 12582912 1月  23 12:02 ibtmp1
drwxr-x---. 2 polkitd input      187 1月  23 12:02 #innodb_temp
drwxr-x---. 2 polkitd input        6 1月  23 12:28 mydb
drwxr-x---. 2 polkitd input      143 1月  23 11:58 mysql
-rw-r-----. 1 polkitd input 31457280 1月  23 12:28 mysql.ibd
drwxr-x---. 2 polkitd input     4096 1月  23 11:58 performance_schema
-rw-------. 1 polkitd input     1680 1月  23 11:58 private_key.pem
-rw-r--r--. 1 polkitd input      452 1月  23 11:58 public_key.pem
-rw-r--r--. 1 polkitd input     1112 1月  23 11:58 server-cert.pem
-rw-------. 1 polkitd input     1680 1月  23 11:58 server-key.pem
drwxr-x---. 2 polkitd input       28 1月  23 11:59 sys
-rw-r-----. 1 polkitd input 12582912 1月  23 12:02 undo_001
-rw-r-----. 1 polkitd input 10485760 1月  23 12:28 undo_002



其他命令
docker run :创建一个新的容器并运行一个命令
docker run --name mynginx -d nginx:latest
docker kill -s KILL mynginx --杀掉运行中的容器mynginx
docker pause :暂停容器中所有的进程。

docker unpause :恢复容器中所有的进程
docker pause db01 --暂停容器db01
docker unpause db01 --恢复容器db01
docker create  --name myrunoob  nginx:latest --使用docker镜像nginx:latest创建一个容器,并将容器命名为myrunoob
docker exec -it mynginx /bin/sh /root/runoob.sh --在容器 mynginx 中以交互模式执行容器内 /root/runoob.sh 脚本
docker ps --列出所有运行的容器
docker ps -a --列出所有容器(包含没有运行的)
docker inspect mysql:5.6 --获取镜像mysql:5.6的元信息。
docker top mymysql --查看容器mymysql的进程信息。
docker attach --sig-proxy=false mynginx --容器mynginx将访问日志指到标准输出,连接到容器查看访问信息。
docker events  --since="1467302400" --显示docker 2016年7月1日后的所有事件。
docker logs -f mynginx --跟踪查看容器mynginx的日志输出。
docker export -o mysql-`date +%Y%m%d`.tar a404c6c174a2 --将id为a404c6c174a2的容器按日期保存为tar文件
docker port mymysql --查看容器mynginx的端口映射情况。
docker commit -a "runoob.com" -m "my apache" a404c6c174a2  mymysql:v1  --将容器a404c6c174a2 保存为新的镜像,并添加提交人信息和说明信息
docker cp /www/runoob 96f7f14e99ab:/www/  --将主机/www/runoob目录拷贝到容器96f7f14e99ab的/www目录下
docker diff mymysql --查看容器mymysql的文件结构更改
docker login -u 用户名 -p 密码 --登陆到Docker Hub
docker tag ubuntu:15.10 runoob/ubuntu:v3 --将镜像ubuntu:15.10标记为 runoob/ubuntu:v3 镜像
docker build -t runoob/ubuntu:v1 . --使用当前目录的 Dockerfile 创建镜像,标签为 runoob/ubuntu:v1
docker history runoob/ubuntu:v3 --查看本地镜像runoob/ubuntu:v3的创建历史
docker save -o my_ubuntu_v3.tar runoob/ubuntu:v3 --将镜像 runoob/ubuntu:v3 生成 my_ubuntu_v3.tar 文档
docker load < busybox.tar.gz 
docker load --input fedora.tar
docker import  my_ubuntu_v3.tar runoob/ubuntu:v4  --从镜像归档文件my_ubuntu_v3.tar创建镜像,命名为runoob/ubuntu:v4

上一篇:iOS技术周报-第29期


下一篇:Docker 容器互联方法