系列1 Docker基础命令
课题简述
简单入门docker的基本使用,文本介绍docker命令的基础使用,docker镜像库,网络,存储的一些知识
环境
- ubuntu16.04
- python3.6
- Docker version 1.13.1
- Docker ID(为了镜像在公共仓库的pull,push)
一、Install Docker
1.1 安装docker-ce
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates
sudo apt-key adv
--keyserver hkp://ha.pool.sks-keyservers.net:80
--recv-keys 58118E89F3A912897C070ADBF76221572C52609D#append this to /etc/apt/sources.listdeb https://apt.dockerproject.org/repo ubuntu-xenial main
sudo apt-get update
apt-cache policy docker-engine
apt-get upgrade
sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual
sudo apt-get install docker-engine
1.2 默认安装系统自带的docker
apt-get update
apt-get install docker.io
1.3 配置加速器
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
1.4 了解docker安装目录
编号 | 路径名 | 意义 |
---|---|---|
1 | /var/lib/docker/devicemapper/devicemapper/data | 用来存储相关的存储池数据 |
2 | /var/lib/docker/devicemapper/devicemapper/metadata | 用来存储相关的元数据 |
3 | /var/lib/docker/devicemapper/metadata/ | 用来存储 device_id、大小、以及传输_id、初始化信息 |
4 | /var/lib/docker/devicemapper/mnt | 用来存储挂载信息 |
5 | /var/lib/docker/container/ | 用来存储容器信息 |
6 | /var/lib/docker/graph/ | 用来存储镜像中间件及镜像的元数据信息、以及依赖信息 |
7 | /var/lib/docker/repositores-devicemapper | 用来存储镜像基本信息 |
8 | /var/lib/docker/tmp | docker临时目录 |
9 | /var/lib/docker/trust | docker信任目录 |
10 | /var/lib/docker/volumes | docker卷目录 |
二、Docker基础命令
2.1 命令的分类
子命令分类 | 子命令 |
---|---|
与镜像相关的命令 | images,search,pull,push,login,logout,commit,build,rmi(127) |
容器生命周期管理 | create,exec,kill,pause,restart,rm,run,start,stop,unpause |
环境信息相关 | info,version |
系统维护相关 | images,inspect,build,commit,pause/unpause,ps,rm,rmi,run,start/stop/restart,top,kill,... |
日志信息相关 | events,history,logs |
Docker ID 相关 | login,logout |
与容器相关的命令 | run, kill, stop, start, restart, logs, export, import |
2.2 命令的基础使用
2.2.1 使用man,help学习docker命令
man docker subcommand
docker help subcommand
docker command --help
2.2.2 Docker镜像的操作
- 显示镜像信息
# 列出镜像的信息docker images# 自定义表显示镜像的信息docker images --format "table {{.ID}} {{.Repository}} {{.Tag}}"
- 查询镜像
- docker search IMAGE_NAME
- search images from docker hub
- 镜像的拉取删除与修改,重命名,创建
# 拉取镜像docker pull busybox# docker ID登录➜ ~ docker login -u bluerdocker Password: Login Succeeded# 镜像重命名(bluerdocker是我的docker ID)docker tag busybox bluerdocker/busybox:latest# 上传镜像➜ ~ docker push bluerdocker/busyboxThe push refers to a repository [docker.io/bluerdocker/busybox]0271b8eebde3: Mounted from library/busybox latest: digest: sha256:91ef6c1c52b166be02645b8efee30d1ee65362024f7da41c404681561734c465 size: 527# 删除镜像# 删除镜像时,如果存在打标签的镜像,那么只有到最后有一个镜像被删除时,镜像才被删除➜ ~ docker rmi bluerdocker/busyboxUntagged: bluerdocker/busybox:latestUntagged: bluerdocker/busybox@sha256:91ef6c1c52b166be02645b8efee30d1ee65362024f7da41c404681561734c465➜ ~ docker rmi busybox Untagged: busybox:latestUntagged: busybox@sha256:bbc3a03235220b170ba48a157dd097dd1379299370e1ed99ce976df0355d24f0Deleted: sha256:6ad733544a6317992a6fac4eb19fe1df577d4dec7529efec28a5bd0edad0fd30Deleted: sha256:0271b8eebde3fa9a6126b1f2335e170f902731ab4942f9f1914e77016540c7bb# 从已有dockerfile创建镜像(download from docker hub)docker build -t nginx/marion:v1 -m 1024 .➜ dockerfile1 docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEnginx/marion v1 64220f7e39ab 2 minutes ago 108 MB
还有一些其他的命令
build Build an image from a Dockerfile
history Show the history of an image
import Import the contents from a tarball to create a filesystem image
inspect Display detailed information on one or more images
load Load an image from a tar archive or STDIN
ls List images
prune Remove unused images
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rm Remove one or more images
save Save one or more images to a tar archive (streamed to STDOUT by default)
tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
docker image save nginx -o nginx.tar
2.2.3 容器的生命周期管理
Commands:
attach # 进入一个正在运行的容器,不建议使用
commit # 把一个正在运行的容器打包成一个新的镜像
cp # 在容器与本地文件系统之间进行文件/文件夹拷贝
create # 创建一个新的容器
diff # 检查运行的容器与所使用镜像之间的变化
exec # 进入正在运行的容器
export # 把一个容器的文件系统归档成一个tar包
inspect # 显示一个/多个容器的详细信息
kill # 杀掉一个/多个正在运行的容器
logs # 查看容器中进程的运行日志
ls # 列出容器列表
pause # 暂停一个/多个容器中的所有进程
port # 显示容器与docker host的端口映射
prune # 移除所有所有停掉的容器
rename # 重命名容器
restart # 重启容器
rm # 删除一个或多个容器
run # 运行一个容器
start # 启动一个或多个容器
stats # 显示容器资源的使用信息
stop # 停止一个或多个容器
top # 显示容器中的进程
unpause # 恢复暂停的容器
update # 更新容器的配置(cpu,mem,重启的策略等)
wait # 阻塞运行直到容器停止,然后打印出它的退出代码
2.2.4 run wordpress on docker
- Deploy MYSQL
docker pull mysql
- 挂载卷保存数据文件
mkdir -p /mysql/data
chmod -p 777 /mysql/data
- MySQL使用过程中的环境变量 Num|Env Variable| Description ---|---|--- 1|MYSQL_ROOT_PASSWORD|root用户的密码 2|MYSQL_DATABASE|创建一个数据库 3|MYSQL_USER,MYSQL_PASSWORD|创建一个用户以及用户密码 4|MYSQL_ALLOW_EMPTY_PASSWORD|允许空密码
- 创建网络
docker network create --subnet 10.0.0.0/24 --gateway 10.0.0.1 marion
docker network ls➜ ~ docker network ls | grep marion
6244609a83bb marion bridge local
- 创建MYSQL container
➜ ~ docker run -v /mysql/data:/var/lib/mysql --name mysqldb --restart=always -p 3306:3306 -e MYSQL_DATABASE='wordpress' -e MYSQL_USER='marion' -e MYSQL_PASSWORD='marion' -e MYSQL_ALLOW_EMPTY_PASSWORD='yes' -e MYSQL_ROOT_PASSWORD='marion' --network=marion --ip=10.0.0.2 -d mysql➜ ~ docker ps -a➜ marion docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3013c407c74b mysql "docker-entrypoint..." 4 minutes ago Up 4 minutes 0.0.0.0:3306->3306/tcp mysqldb➜ marion docker exec -it 3013c407c74b /bin/bash
root@3013c407c74b:/# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
9: eth0@if10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:0a:00:00:02 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.2/24 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::42:aff:fe00:2/64 scope link
valid_lft forever preferred_lft forever
root@3013c407c74b:/# apt-get install net-tools -y
root@3013c407c74b:/# netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.11:45485 0.0.0.0:* LISTEN -
tcp6 0 0 :::3306 :::* LISTEN -
udp 0 0 127.0.0.11:48475 0.0.0.0:* -
root@3013c407c74b:/# mysql -u marion -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 3
Server version: 5.7.20 MySQL Community Server (GPL)Copyright (c) 2000, 2017, 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> show databases;+--------------------+
| Database |
+--------------------+
| information_schema |
| wordpress |
+--------------------+
2 rows in set (0.01 sec)mysql>
- 3、运行nginx-php
mkdir -p /var/www/htmldocker run --name php7 -p 9000:9000 -p 80:80 -v /var/www/html:/usr/local/nginx/html --restart=always --network=marion --ip=10.0.0.3 -d skiychan/nginx-php7
docker ps
docker exec -it cfb9556b71b3 /bin/bash
cd /usr/local/php/etc
vim php.inidate.timezone =Asia/Shanghai
* 编辑nginx配置文件/usr/local/nginx/conf/nginx.conf
user www www; #modify
worker_processes auto; #modify#error_log logs/error.log;#error_log logs/error.log notice;#error_log logs/error.log info;error_log /var/log/nginx_error.log crit; #add#pid logs/nginx.pid;pid /var/run/nginx.pid; #modify
worker_rlimit_nofile 51200;events {
use epoll;
worker_connections 51200;
multi_accept on;
}http {
include mime.types;
default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; client_max_body_size 100m; #add
sendfile on;
#tcp_nopush on; #keepalive_timeout 0;
keepalive_timeout 120; #65; #gzip on; server {
listen 80;
server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; root /usr/local/nginx/html;
index index.php index.html index.htm; location / {
try_files $uri $uri/ /index.php?$args;
} #error_page 404 /404.html; # redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
} location ~ .php$ {
root /usr/local/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /$document_root$fastcgi_script_name;
include fastcgi_params;
}
} #add
##########################vhost#####################################
include vhost/*.conf;}daemon off;
- 测试配置文件是否有问题
[root@cfb9556b71b3 sbin]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
- 重新加载配置文件
[root@cfb9556b71b3 sbin]# /usr/local/nginx/sbin/nginx -s reload
[root@cfb9556b71b3 sbin]#
三、Dcokerfile
FROM:指定镜像MAINTAINER:维护者信息COPY:从build context复制到镜像copy src destcopy [“src”,”dest”]src只能是build context中的文件ADD:与copy类似,如果是归档以及压缩的文件,会被自动的解压ENV:设置环境变量,环境变量可被后面的指令使用EXPOSE:指定容器中的进程监听某个端口,VOLUME:将文件或者目录声明为卷WORKDIR:为RUN,CMD,ENTERPOINT,ADD或COPY指令设置镜像中的当前工作目录RUN:在容器内运行指定的命令ENTERPOINT:设置容器启动时运行的命令
相关文章
- 在 Go 里用 CGO?这 7 个问题你要关注!
- 9款优秀的去中心化通讯软件 Matrix 的客户端
- 求职数据分析,项目经验该怎么写
- 在OKR中,我看到了数据驱动业务的未来
- 火山引擎云原生大数据在金融行业的实践
- OpenHarmony富设备移植指南(二)—从postmarketOS获取移植资源
- 《数据成熟度指数》报告:64%的企业领袖认为大多数员工“不懂数据”
- OpenHarmony 小型系统兼容性测试指南
- 肯睿中国(Cloudera):2023年企业数字战略三大趋势预测
- 适用于 Linux 的十大命令行游戏
- GNOME 截图工具的新旧截图方式
- System76 即将推出的 COSMIC 桌面正在酝酿大变化
- 2GB 内存 8GB 存储即可流畅运行,Windows 11 极致精简版系统 Tiny11 发布
- 迎接 ecode:一个即将推出的具有全新图形用户界面框架的现代、轻量级代码编辑器
- loongarch架构介绍(三)—地址翻译
- Go 语言怎么解决编译器错误“err is shadowed during return”?
- 敏捷:可能被开发人员遗忘的部分
- Denodo预测2023年数据管理和分析的未来
- 利用数据推动可持续发展
- 在 Vue3 中实现 React 原生 Hooks(useState、useEffect),深入理解 React Hooks 的