Friday 21 December 2018

Updated Docker Compose setup

--------------------------------------
Docker useful commands
--------------------------------------


# maksure to use sudo when running docker compose
# run all serivces in current dirs yml file
$ docker-compose up -d
# stop all services
$ docker-compose stop
# view all running containers
$ docker ps

---------------------------------------------------
Docker installation
--------------------------------------------------------
* Install docker && docker-compose(prewritten docker commands that did congfigs for container)
Docker: - https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-using-the-repository
Lateset docker-compose:
curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" > ./docker-compose
sudo mv ./docker-compose /usr/bin/docker-compose
sudo chmod +x /usr/bin/docker-compose
(https://stackoverflow.com/questions/49839028/how-to-upgrade-docker-compose-to-latest-version)


* Config docker to use some IP not in conflict wiht company one
- vim /etc/docker/daemon.json
{
  "bip" : "192.168.6.1/29",
  "dns": ["8.8.8.8", "8.8.4.4"],
  "ipv6": false,
  "mtu" :1500
}

* restart docker -
   sudo systemctl restart docker.service

 * Start docker service:
  - Instructions
We'll start by creating a folder for this project: mkdir lamp-stack && cd lamp-stack

Create another subdirectory, /php which contains the following index.php file:

<!-- ./php/index.php -->

<html>
    <head>
        <title>Hello World</title>
    </head>

    <body>
        <?php
            echo "Hello, World!";
        ?>
    </body>
</html>
Populate docker-compose.yml with the following configuration:
# ./docker-compose.yml

version: '3'

services:
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: my_secret_pw_shh
      MYSQL_DATABASE: test_db
      MYSQL_USER: devuser
      MYSQL_PASSWORD: devpass
    ports:
      - "9906:3306"
  web:
    image: php:7.2.2-apache
    container_name: php_web
    depends_on:
      - db
    volumes:
      - ./php/:/var/www/html/
    ports:
      - "8100:80"
    stdin_open: true
    tty: true
Our directory structure should look as follows:
$ tree
.
├── docker-compose.yml
└── php
    └── index.php
 ---DockerFile(use by docker to create an image(https://docs.docker.com/get-started/part2/#apppy))


 DockerFile content:

FROM php:7.2.2-apache
MAINTAINER egidio docile
RUN docker-php-ext-install pdo pdo_mysql mysqli
---------------------(use php:7.2.2-apache image, use its built in command to install pdo, mysqli: https://linuxconfig.org/how-to-create-a-docker-based-lamp-stack-using-docker-compose-on-ubuntu-18-04-bionic-beaver-linux)

-----------------------------------------------
Execute
sudo docker-compose up -d in the terminal and load http://localhost(your url):8100/ in your browser.
Time to learn some PHP!

Notes
* image is from docker hub
* volume is the folder we want to retain when destroy and recreate same containers


We use port-forwarding to connect to the inside of containers from our local machine.
webserver: http://localhost:8100
db: mysql://devuser:devpass@localhost:9906/test_db
Our local directory, ./php, is mounted inside of the webserver container as /var/www/html/
The files within in our local folder will be served when we access the website inside of the container



 (https://alysivji.github.io/php-mysql-docker-containers.html)
--------------------------------------------------------------------------------------------------
* show list of running containers:
- sudo docker-compose ps
* GO inside to edit contianer file:
- you have two ways to edit file (config, source code, any files):

* php_web is docker container name

1. docker exec -it php_web bash
2. if you have a volume, then you can edit the files inside the volume directly on the host machine.

or
vim ~/.bashrc
dexec() {
  docker exec -it -e TERM=$TERM -e LINES=$LINES -e COLUMNS=$COLUMNS "$@"
}
$ source ~/.bashrc
Then, you can login into your container by running:

dexec   CONTAINER_NAME  CMD`


* exit a container
-
// If you don't want to add an editor just to make a few small changes (e.g., change the Tomcat configuration), you can just use:

docker cp <container>:/path/to/file.ext  (if just want place in a folder go like var/www/html, if want place at a specific file in folder, go like var/www/html/index.php)

//which copies it to your local machine (to your current directory).

//Then edit the file locally using your favorite editor, and then do a

docker cp file.ext <container>:/path/to/file.ext

to replace the old file.

(https://stackoverflow.com/questions/30853247/how-do-i-edit-a-file-after-i-shell-to-a-docker-container)


This will first stop all the containers, next remove all the containers, and finally start them in the background as specified by the docker-compose.yml file.

First, cd to the directory where docker-compose.yml file is present, and then execute the following to restart.

cd /home/myapp (directory where docker-compose.yml file is )

docker-compose stop && docker-compose rm -f

docker-compose up -d

(https://www.thegeekstuff.com/2016/04/docker-compose-up-stop-rm/comment-page-1/)



----------------- parallel && Makefile


apt-get install parallel
apt-get install make


vim Makefile

anything:(TAB) try_curl say_hello
say_hello:
echo "hello world"
try_curl:
seq 4 | parallel -n0 -j2 "curl -H 'Content-Type:application/json' -X GET http://172.16.107.209/~jxiang/response_GET.php"


----------------------------ubuntu cat
* cat file (displays file)
* cat file1 > file2 (copy cotnent of 1 to 2(override), if 2 dne, it will be created)
* cat file1 >> file2 (copy cotnent of 1 to 2(attach), if 2 dne, it will be created)

No comments:

Post a Comment