docker相关
相关问题:
a、可在如下网址查找对应的镜像及其版本 https://hub.docker.com,docker pull 如果不加版本,会拉取最新的。个人不建议拉取高版本的镜像,建议拉取稳定版本。
b、执行docker exec -it 容器id /bin/bash命令报如下错:oci runtime error: exec failed: container_linux.go:265: starting container process caused “exec: “/bin/bash”: stat /bin/bash: no such file or directory”。采用docker exec -it 容器id /bin/sh即可
c、需要持久化的数据要将对应的目录挂载出来。
docker安装
依次执行如下命令即可。
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.daocloud.io/docker/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=$(dpkg --print-architecture)] https://download.daocloud.io/docker/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce
sudo service docker start
sudo service docker status
docker阿里云镜像配置
1、修改/etc/docker/daemon.json文件配置,没有则新建;
{
"registry-mirrors": ["https://72idtxd8.mirror.aliyuncs.com"]
}
2、重启daemon;systemctl daemon-reload
3、重启docker服务:systemctl restart docker
常用docker命令
拉取镜像:docker pull IMAGE_NAME
推送镜像:docker push IMAGE_NAME ,将本地镜像推送到镜像仓库
压缩镜像成tar包:docker save IMAGE_NAME | gzip > FILENAME.tar.gz
加载镜像:docker load --input FILENAME.tar.gz
查看镜像:docker images,eg:docker images python,docker images python:2.7.16-slim-stretch
删除镜像:docker rmi IMAGE_NAME
查看所有容器:docker ps -a
查看正在运行的容器:docker ps
启动容器:docker start CONTAINER_ID
停止容器:docker stop CONTAINER_ID
进入容器:docker exec -it CONTAINER_ID bin/bash或docker exec -it CONTAINER_ID bin/sh
删除为的docker镜像:docker rmi $(docker images | grep “none” | awk ‘{print $3}’)
docker图形化界面
直接运行如下命令,然后访问ip:19000即可
docker run -d --name portainerUI -p 19000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer
常用镜像及其使用
1、mysql
docker pull mysql:5.6.35
sudo docker run --name mysql5.6.35 -p 3306:3306 -v /home/data/mysql/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.6.35
说明:
1、–name指定容器名,-p将端口映射出来,-v将数据挂载出来,数据持久化到宿主机。其中/home/data/mysql/为宿主机中的目录,/var/lib/mysql为容器中的数据目录。ps:命令中参数通常都是宿主机在前、容器在后。后续不在解释。
2、该命令只执行一次即可,重启启动时,docker start 容器id即可。
2、zookeeper
docker pull zookeeper:3.5
docker run -d --name zookeeper -p 2181:2181 -t zookeeper:3.5
3、kafka
docker pull wurstmeister/kafka:2.11-2.0.0
docker run -d --name kafka --publish 9092:9092 --link zookeeper --env KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 --env KAFKA_ADVERTISED_HOST_NAME=localhost --env KAFKA_ADVERTISED_PORT=9092 --volume /etc/localtime:/etc/localtime wurstmeister/kafka:2.11-2.0.0
ps:启动kafka时,需注意有可能因为zk导致失败,如失败,请删除原来的zk和kafka容器及镜像,按照上述方式执行。
4、redis
docker pull redis:5.0-rc-alpine3.8
docker run --name redis -p 6379:6379 -v /home/data/redis/:/data -d redis:5.0-rc-alpine3.8
5、nginx
日志文件位置:/var/log/nginx
配置文件位置: /etc/nginx
资源存放的位置: /usr/share/nginx/html
在home/data/nginx/etc/nginx/下创建nginx.conf,内容如下
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/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 /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
}
挂载nginx.conf文件需特别注意,文件有问题可能会导致启动失败。
docker pull nginx:1.14
docker run --name nginx -p 80:80 -v /home/data/nginx/var/log/nginx:/var/log/nginx -v /home/data/nginx/etc/nginx/nginx.conf:/etc/nginx/nginx.conf -v /home/data/nginx/usr/share/nginx/html:/usr/share/nginx/html -d nginx:1.14
反向代理:在http层增加
upstream myapp1 {
ip_hash;
#ip_hash,每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
server ip1:port1;
server ip2:ip2;
server ip3:ip3;
}
在server的location中增加
proxy_pass http://myapp1;
访问localhost:80/test会去随机访问http://ipN:portN/test
6、mongoDb
docker pull mongo
docker run --name mongo -p 27018:27017 -v /home/data/mongo/noAuth:/data/db -d mongo:latest
docker run --name mongo_auth -p 27017:27017 -v /home/data/mongo/auth:/data/db -d mongo:latest --auth
docker exec -it mongo_auth mongo admin
//注意以下操作顺序!!!
use admin
db.createUser({user:"root",pwd:"root",roles:[{role:"root",db:"admin"}]});
db.auth("root","root");
use testMongo;
db.createUser({user:"weizheng",pwd:"weizheng",roles:[{role:"readWrite",db:"testMongo"}]});
备注:高版本的mongo(本人当时用的是4.1.3),发现按此操作后,通过robo-3t连接一直鉴权失败,不确定是什么原因!后来mongo镜像采用的latest(实际版本为4.0.2)然后一切ok。
7、rabbitmq
docker pull rabbitmq:management
docker run -d --hostname my-rabbit --name rabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 -p 25672:25672 -p 61613:61613 -p 1883:1883 -v /home/data/rabbitmq:/var/rabbitmq/lib rabbitmq:management
docker in docker
将以下3个目录进行挂载即可。
/usr/bin/docker:/usr/bin/docker
/var/run/docker.sock:/var/run/docker.sock
/usr/lib/x86_64-linux-gnu/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7