docker基础之docker命令
安装Docker
安装Docker
sudo curl -sSL https://get.docker.com/ | sh
为当前用户赋权
sudo usermod -a -G docker $USER
注销再登陆
docker version
docker images
安装docker-compose
sudo apt-get -y install docker-compose
----------------------------------------------------
快速启动映像范例
docker run -d -p 80:80 yeasy/simple-web
docker run -d -p 8000:80 tutum/wordpress
docker run -d -p 2048:80 alexwhen/docker-2048
docker run -d -p 8080:80 dorowu/ubuntu-desktop-lxde-vnc
有趣的映像
sudo docker run -d \
--name aria2-with-webui \
-p 6800:6800 \
-p 6880:80 \
-p 6888:8080 \
-v /DOWNLOAD_DIR:/data \
-v /CONFIG_DIR:/conf \
-e SECRET=12345678 \
xujinkai/aria2-with-webui
docker run -d -p 1024:80 owncloud
-----------------------------------------------------
docker 基本命令
Docker Pull
Docker Run
Docker ps
Docker Stats
Docker stop
Docker Start
Docker Rm
###############
nulige@ubuntu:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1f6a1ead5860 dorowu/ubuntu-desktop-lxde-vnc "/startup.sh" 33 minutes ago Up 33 minutes (healthy) 0.0.0.0:8080->80/tcp infallible_jackson
d15c3e859201 tutum/wordpress "/run.sh" 43 minutes ago Up 43 minutes 3306/tcp, 0.0.0.0:8000->80/tcp wonderful_feynman
4ddae03a591e yeasy/simple-web "/bin/sh -c 'python …" About an hour ago Up About an hour 0.0.0.0:80->80/tcp agitated_shockley
b8c76c6bf014 alexwhen/docker-2048 "nginx -g 'daemon of…" About an hour ago Up About an hour 0.0.0.0:2048->80/tcp nostalgic_easley
#查看容器占多少内存
nulige@ubuntu:~$ docker top 1f6a1ead5860
#关闭容器
docker stop d15c3e859201
#启动容器
nulige@ubuntu:~$ docker start d15c3e859201
d15c3e859201
#查看所有容器
nulige@ubuntu:~$ docker ps -a -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
1f6a1ead5860 dorowu/ubuntu-desktop-lxde-vnc "/startup.sh" 36 minutes ago Up 36 minutes (healthy) 0.0.0.0:8080->80
d15c3e859201 tutum/wordpress "/run.sh" About an hour ago Exited (137) About a minute ago
4ddae03a591e yeasy/simple-web "/bin/sh -c 'python …" About an hour ago Up About an hour 0.0.0.0:80->80/t
b8c76c6bf014 alexwhen/docker-2048 "nginx -g 'daemon of…" About an hour ago Up About an hour 0.0.0.0:2048->
#查找镜像
nulige@ubuntu:~$ docker search ***
#安装网站
nulige@ubuntu:~$ docker run -d --name myhttpd -p 80:80 httpd
访问:
http://192.168.56.15/
清理所有正在运行的容器(慎用)
docker stop $(docker ps -a -q);docker rm $(docker ps -a -q)
删除所有docker images
[root@harbor ~]# docker rmi $(docker images -q)
------------------------------------------------------
映像交互式操作
运行httpd容器
docker run -d --name myhttpd -p 80:80 httpd
列出当前映像
docker images
查看httpd映像历史
docker image history httpd
针对httpd映像执行交互式操作
docker exec -it myhttpd bash
在httpd映像内部安装nano
apt-get update && apt-get install -y nano
使用nano修改index文件
nano /htdocs/index.html
或
root@a40c7c6c0be5:/usr/local/apache2# cd htdocs
root@a40c7c6c0be5:/usr/local/apache2/htdocs# dir
index.html
#修改文件
nano index.html
it does work!
#提交映像
nulige@ubuntu:~$ docker commit myhttpd httpdnew
sha256:36683bacf96ba7beabb7a800c960bb0bf665ef986e0ada473587b3a5b36af4ff
nulige@ubuntu:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a40c7c6c0be5 httpd "httpd-foreground" 14 minutes ago Up 14 minutes 0.0.0.0:80->80/tcp myhttpd
nulige@ubuntu:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpdnew latest 36683bacf96b 14 seconds ago 149MB
dorowu/ubuntu-desktop-lxde-vnc latest 64317909d597 35 hours ago 1.11GB
httpd latest d4a07e6ce470 3 weeks ago 132MB
xujinkai/aria2-with-webui latest 2733e342944c 6 weeks ago 23.9MB
owncloud latest 327bd201c5fb 3 months ago 618MB
yeasy/simple-web latest 172c78152bf6 12 months ago 679MB
tutum/wordpress latest 7e7f97a602ff 3 years ago 477MB
alexwhen/docker-2048 latest 7929bcd70e47 3 years ago 8.02MB
提交映像
docker commit myhttpd httpdnew
查看httpdnew映像历史
docker image history httpdnew
使用httpdnew创建容器观察结果
docker run -d -p 81:80 httpdnew
清理环境
docker stop $(docker ps -a -q);docker rm $(docker ps -a -q)
--------------------------------------
Dockerfile实验
创建httpd实验文件夹
mkdir httpd
进入到实验文件夹
cd httpd
创建index文件
nano index.html
<html><body><h1>Today Is Very Happy!</h1></body></html>
创建Dockerfile文件
nano Dockerfile
# Simple Dockerfile for httpd
FROM httpd
MAINTAINER Abraham Cheng
# Bundle app source
COPY . /usr/local/apache2/htdocs
#ctrl +O
构建映像
docker build -t myhttpd .
运行容器查看效果
docker run -d -p 80:80 myhttpd
查看映像id
docker history image id
登陆到docker hub并推送映像
Docker login
给新映像打tag
docker tag myhttpd chengzh/httpd
推送映像到docker hub
docker push chengzh/httpd
如果要演示手工ci\cd,则需要
1. 修改index.html
2. 重新打标签
3. 再次推送
清理环境
docker stop $(docker ps -a -q);docker rm $(docker ps -a -q)
-------------------------------------------------
使用docker compose部署多容器应用
安装docker-compose
sudo apt-get -y install docker-compose
创建docker-compose文件
nano docker-compose.yml
version: '3.3'
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
volumes:
#备注:version: '3.3' 16.04版本改成'2.0'
运行docker-compose
docker-compose up -d
#查看映射的端口
nulige@ubuntu:~/docker-compose$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
21d9ed8d66f7 wordpress:latest "docker-entrypoint.s…" 19 minutes ago Up 19 minutes 0.0.0.0:8000->80/tcp dockercompose_wordpress_1
ea6ba796836b mysql:5.7 "docker-entrypoint.s…" 19 minutes ago Up 19 minutes 3306/tcp, 33060/tcp dockercompose_db_1
#访问:
http://192.168.56.15:8000
查看容器列表
docker ls
查看映像列表
dockers images
停止容器
docker-compose down
#加volumes,可以删除持久化参数(就是配置网站后,网站中的数据)
docker-compose down --volumes
#查看本机的卷
#docker volume ls
nulige@ubuntu:~/docker-compose$ docker volume ls
DRIVER VOLUME NAME
local 538f96cddb6a9478087a9894636e794ac054c20e4da3b5a2f10719b794a49a95
local 5915d2a527022d3992f50fe2c779c1eebf5fb59fae2d4146b4ed2790aa07a1a4
local a03fc37e67d8ed0e91593fcb151c36e1257d741a7d7818920cd5361414ec9810
local dockercompose_db_data #查看这个卷
local f6e0e2601724e4d684c01225e1702234b0000c4a6fb00164b2b82fec11c90f4b
#数据存持久化持久(查看详细的卷信息)
docker volume inspect chengzh_db_data
nulige@ubuntu:~/docker-compose$ docker volume inspect dockercompose_db_data
[
{
"CreatedAt": "2019-04-25T15:11:13+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/dockercompose_db_data/_data",
"Name": "dockercompose_db_data",
"Options": null,
"Scope": "local"
}
]
---------------------------------------------
数据卷操作
bind mount: 是将 host 上已存在的目录或文件 mount 到容器。
mkdir http
cd http
nano index.html
<html><body><h1>Go West!</h1></body></html>
#指定目录挂载卷
docker run -d -p 80:80 -v /home/chengzh/http:/usr/local/apache2/htdocs httpd
#不指定目录挂载卷
docker managed volume 与 bind mount 在使用上的最大区别是不需要指定 mount 源,指明 mount point 就行了。
docker run -d -p 81:80 -v /usr/local/apache2/htdocs httpd
docker inspect container id
注意mounts字段的source目录
ls source dir
nano source dir/index.html
修改下,刷新页面看结果
docker stop $(docker ps -a -q);docker rm $(docker ps -a -q)
------------------------------------------------------
网络实验
在宿主机上列出所有的网络类型
docker network ls
docker inspect network bridge
在宿主机上观察bridge 网络,注意观察veth
sudo apt install bridge-utils -y
nulige@ubuntu:~/docker-compose$ brctl show
bridge name bridge id STP enabled interfaces
br-e0261c85f296 8000.024200ebef23 no veth5debc9e
vethfcda45e
docker0 8000.02426f41769f no
创建httpd容器
docker run -d --name httpd1 httpd
在虚机里观察eth0
docker exec -it httpd1 bash
ip a
在宿主机上观察bridge 网络,注意观察veth
docker inspect network bridge
brctl show
创建第二个httpd容器
docker run -d --name httpd2 httpd
在宿主机上观察bridge 网络,注意观察veth
brctl show
查看容器和宿主机的vnet pair
宿主机上执行
Ip link
容器
docker exec -it httpd2 bash
cat /sys/class/net/eth0/iflink
---------------------------------------------
创建自定义网络
docker network create --driver bridge --subnet 172.22.16.0/24 --gateway 172.22.16.1 mynetwork
检查mynetwork配置
docker network inspect mynetwork
创建容器使用新建的自定义网络
docker run -d -p 83:80 --network=mynetwork httpd
检查容器ip地址
ip a
为前述httpd容器创建第二块网卡使其连接到mynetwork
docker network connect mynetwork container id
检查双网卡httpd容器的网络设置
docker container inspect container id
检查 httpd的网络配置
docker exec -it container id bash
ip a
ping 172.22.16.3
docker stop $(docker ps -a -q);docker rm $(docker ps -a -q)
docker network rm mynetwork
------------------------------------------------------
清理环境
docker stop $(docker ps -a -q);docker rm $(docker ps -a -q)
------------------------------------------------------
内存分配限制
合理分配,循环释放测试(运行压力测试工具,压测内存,最大压到280M)
docker run -it -m 300M progrium/stress --vm 1 --vm-bytes 280M
反面例子(运行压力测试工具,压测内存,最大压到310M,超过容器的上限,会删除掉容器)
docker run -it -m 300M progrium/stress --vm 1 --vm-bytes 310M
docker stop $(docker ps -a -q);docker rm $(docker ps -a -q)
清理环境
docker stop $(docker ps -a -q);docker rm $(docker ps -a -q)
----------------------------------------------------
CPU分配限制
创建两个不同优先级的容器,根据宿主机cpu数量设置参数
docker run --name containerA -d -c 1024 progrium/stress --cpu 1
docker run --name containerB -d -c 512 progrium/stress --cpu 1
1024指的是:60.67,按比例进行分配。
CPU:250m (指的是CPU的四分之一,=0.4个CPU)
检查两个容器的cpu使用情况
docker stats
关闭容器A,再检查cpu使用情况
docker stats
清理环境
docker stop $(docker ps -a -q);docker rm $(docker ps -a -q)
#限制容器资源

浙公网安备 33010602011771号